Vuex

【Vuex】Vuex详解,一篇文章搞懂Vuex详细使用过程和代码编写 实现组件全局(数据)管理的一种机制,可以方便的实现组件之间共享数据,不同于上述三种传递值的方式。可以把vuex当成一个store仓库,可以集中管理共享的数据,并且存储在vuex中的数据都是响应式的,数据与页面同步。一般情况下,只有组件之间共享的数据,才有必要存储到vuex中;对于组件中的私有数据,依旧存储在组件自身的data中。 阅读详情

简单理解Vuex

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。可以想象为一个“前端数据库”(数据仓库),让其在各个页面上实现数据的共享包括状态,并且可操作

Vuex用于解决传值问题

vue中各个组件之间传值

1.父子组件
父组件–>子组件,通过子组件的自定义属性:props
子组件–>父组件,通过自定义事件:this.$emit(‘事件名’,参数1,参数2,…);

2.非父子组件或父子组件
通过数据总数Bus,this. r o o t . root. root.emit(‘事件名’,参数1,参数2,…)

3.非父子组件或父子组件
更好的方式是在vue中使用vuex

方法1: 用组件之间通讯。这样写很麻烦,并且写着写着,估计自己都不知道这是啥了,很容易写晕。
方法2: 我们定义全局变量。模块a的数据赋值给全局变量x。然后模块b获取x。这样我们就很容易获取到数据

变量传值的演变形式
在这里插入图片描述

了解Vuex中的各个js文件的用途

Vuex组成

Vuex分成五个部分:
1.State:单一状态树
2.Getters:状态获取
3.Mutations:触发同步事件
4.Actions:提交mutation,可以包含异步操作
5.Module:将vuex进行分模块

在这里插入图片描述

使用vuex

1,安装
npm install vuex -S

在这里插入图片描述
2 ,创建store模块,分别维护state/actions/mutations/getters
store
index.js
state.js
actions.js
mutations.js
getters.js
在这里插入图片描述
3, 在store/index.js文件中新建vuex的store实例,并注册上面引入的各大模块

import Vue from 'vue'
import Vuex from 'vuex'
import state from './state'
import getters from './getters'
import actions from './actions'
import mutations from './mutations'
Vue.use(Vuex)
const store = new Vuex.Store({
 	state,
 	getters,
 	actions,
 	mutations
 })

 export default store

4 ,在main.js中导入并使用store实例

在这里插入图片描述

在这里插入图片描述

vuex的核心概念:store、state、getters、mutations、actions

1, store
每一个Vuex应用的核心就是store(仓库),store基本上就是一个容器,它包含着你的应用中大部分的状态 (state)。
const store = new Vuex.Store({
state, // 共同维护的一个状态,state里面可以是很多个全局状态
getters, // 获取数据并渲染
actions, // 数据的异步操作
mutations // 处理数据的唯一途径,state的改变或赋值只能在这里
})

2, state(保存数据的容器)
状态,即要全局读写的数据
const state = {
resturantName:‘飞歌餐馆’
};

  this.$store.state.resturantName;//不建议

3,getters(getXxx)
获取数据并渲染,
const getters = {
resturantName: (state) => {
return state.resturantName;
}
};

 注1:getters将state中定义的值暴露在this.$store.getters对象中,我们可以通过如下代码访问
      this.$store.getters.resturantName

 注2:state状态存储是响应式的,从store实例中读取状态最简单的方法就是在计算属性中返回某个状态,如下:
      computed: {
        resturantName: function() {
          return this.$store.getters.resturantName;
        }
      }

4, mutations(setXxx)
处理数据的唯一途径,state的改变或赋值只能在这里

  export default {
    // type(事件类型): 其值为setResturantName
    // payload:官方给它还取了一个高大上的名字:载荷,其实就是一个保存要传递参数的容器
setResturantName: (state, payload) => {
      state.resturantName = payload.resturantName;
}
  }

  注1:mutations中方法的调用方式
       不能直接调用this.$store.mutations.setResturantName('KFC'),必须使用如下方式调用:
       this.$store.commit(type,payload);

       // 1、把载荷和type分开提交
       store.commit('setResturantName',{
         resturantName:'KFC'
       })

       // 2、载荷和type写到一起
      store.commit({
        type: 'setResturantName',
        resturantName: 'KFC'
      })
       
  注2:一定要记住,Mutation 必须是同步函数。为什么呢?异步方法,我们不知道什么时候状态会发生改变,所以也就无法追踪了
       如果我们需要异步操作,Mutations就不能满足我们需求了,这时候我们就需要Actions了
       mutations: {
        someMutation (state) {
          api.callAsyncMethod(() => {
            state.count++
          })
        }
       } 

5 , actions
数据的异步(async)操作

Vuex取值

1,state(保存数据的容器)
状态,即要全局读写的数据

2, getters
获取数据并渲染

注1:getters将state中定义的值暴露在this.$store.getters对象中
注2:state状态存储是响应式的,从store实例中读取状态最简单的方法就是在计算属性中返回某个状态,

实例:
state.js

export default{
	resturantName:'飞歌餐馆'
}

新建vue
在这里插入图片描述
设置路由:

在这里插入图片描述
在这里插入图片描述
VuexPage1.vue

<template>
	<div>
			
		<ul>
			<li>这是第一张页面:{{msg}}</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				
			};
		},
		computed:{
			msg(){
				return this.$store.state.resturantName;
			}
		}
	}
</script>

<style>

</style>

VuexPage2.vue

<template>
	<div>
		<ul>
			<li>这是第二张页面:{{msg}}</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				
			};
		},
		computed:{
			msg(){
				return this.$store.state.resturantName;
			}
		}
	}
</script>

<style>

</style>

效果:
在这里插入图片描述
在这里插入图片描述
注意:不建议使用这种方式,vuex遵循编码解耦的原则,各个模块各司其职,所以用getters来取值更合理

下面我们换一种方式:采用getters
getters.js

export default{
	getResturantName:(state)=>{
		return state.resturantName;
	}
}

VuexPage1.vue

<script>
	export default {
		data() {
			return {
				
			};
		},
		computed:{
			
			msg(){
				return this.$store.getters.getResturantName;
			}
		}
	}
</script>

VuexPage2.vue也做出相同改变

Vuex存值

处理数据的唯一途径,state的改变或赋值只能在这里

    // type(事件类型): 其值为setResturantName
    // payload:官方给它还取了一个高大上的名字:载荷,其实就是一个保存要传递参数的容器

注1:mutations中方法的调用方式 不能直接调用

this.$store.mutations.setResturantName('KFC'),必须使用如下方式调用:
       this.$store.commit(type,payload);

       // 1、把载荷和type分开提交
       store.commit('setResturantName',{
         resturantName:'KFC'
       })

       // 2、载荷和type写到一起
      store.commit({
        type: 'setResturantName',
        resturantName: 'KFC'
      })

注2:一定要记住,Mutation 必须是同步函数。为什么呢?异步方法,我们不知道什么时候状态会发生改变,所以也就无法追踪了
如果我们需要异步操作,Mutations就不能满足我们需求了,这时候我们就需要Actions了

       mutations: {
        someMutation (state) {
          api.callAsyncMethod(() => {
            state.count++
          })
        }
       }

实例:
mutations.js

export default{
	setResturantName: (state, payload) => {
          state.resturantName = payload.resturantName;
}

}

改变VuexPage1.vue

<template>
	<div>
			
		<ul>
			<li>这是第一张页面:{{msg}}</li>
			<li><input v-model="newName"/>
			<button @click="buy">盘他</button>
			</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				newName:''
			};
		},
		computed:{
			
			msg(){
				return this.$store.getters.getResturantName;
			}
		},
		methods:{
			buy(){
				
				this.$store.commit('setResturantName',{
					resturantName:this.newName
				})
			}
		}
	}
</script>

<style>

</style>

改变第一张页面后,第二张也会改变

Vuex异步存值

actions.js

export default{
	setResturantNameAsync: (context, payload) => {
         setTimeout(()=>{
			 context.commit('setResturantName',{
					resturantName:payload.resturantName
				})
		 },6000);
},
doAjax: (context, payload) => {
         let _this=payload._this;
		 let url=_this.axios.urls.SYSTEM_MENU_TREE;
		 _this.axios.post(url,{}).then((response)=>{
		 	console.log(response);
		 	
		 }).catch(function(error){
		 	console.log(error);
		 });
}


}

actions.js

export default{
	setResturantNameAsync: (context, payload) => {
         setTimeout(()=>{
			 context.commit('setResturantName',{
					resturantName:payload.resturantName
				})
		 },6000);
}

}

VuexPage1.vue

<template>
	<div>
			
		<ul>
			<li>这是第一张页面:{{msg}}</li>
			<li><input v-model="newName"/>
			<button @click="buy">盘他</button>
			<button @click="badbuy">异步</button>
			</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				newName:''
			};
		},
		computed:{
			
			msg(){
				return this.$store.getters.getResturantName;
			}
		},
		methods:{
			buy(){
				
				this.$store.commit('setResturantName',{
					resturantName:this.newName
				})
			},
			badbuy(){
				this.$store.dispatch('setResturantNameAsync',{
					resturantName:this.newName
				})
			}
		}
	}
</script>

<style>

</style>

点击盘他,立刻改名,点击异步,等到六秒后再改名

Vuex调用异步函数

VuexPage1.vue

<template>
	<div>
			
		<ul>
			<li>这是第一张页面:{{msg}}</li>
			<li><input v-model="newName"/>
			<button @click="buy">盘他</button>
			<button @click="badBuy">异步</button>
			<button @click="doAjax">调用异步函数</button>
			</li>
		</ul>
	</div>
</template>

<script>
	export default {
		data() {
			return {
				newName:''
			};
		},
		computed:{
			
			msg(){
				return this.$store.getters.getResturantName;
			}
		},
		methods:{
			buy(){
				
				this.$store.commit('setResturantName',{
					resturantName:this.newName
				})
			},
			badBuy(){
				this.$store.dispathdispatch('setResturantNameAsync',{
					resturantName:this.newName
				})
			},
			doAjax(){
				this.$store.dispatch('doAjax',{
					_this:this
				})
			}
		}
	}
</script>

<style>

</style>

在这里插入图片描述

action与mutation的不同

1.Action提交的是mutation,而不是直接变更状态
2.Action可以包含任意异步操作
3.Action的回调函数接收一个 context 上下文参数,注意,这个参数可不一般,它与 store 实例有着相同的方法和属性
但是他们并不是同一个实例,context 包含:
1. state、2. rootState、3. getters、4. mutations、5. actions 五个属性
所以在这里可以使用 context.commit 来提交一个 mutation,或者通过 context.state 和 context.getters 来获取 state 和 getters。

注1:actions中方法的调用方式语法如下:
    this.$store.dispatch(type,payload);
    例如:this.$store.dispatch('setResturantNameByAsync',{resturantName: '啃德鸡2'});

注2:action中提交mutation
    context.commit('setResturantName',{resturantName: '啃德鸡2'});

注3:VUEX 的 actions 中无法获取到 this 对象
    如果要在actions 或者 mutations 中使用this对象。可以在调用的时候把this对象传过去
{resturantName: '啃德鸡2',_this:this}//this就是在调用时的vue实例      
Altium Designer操作技巧(1)——原理图中如何批量替换元器件? 《AltiumDesigner批量替换元器件技巧分享》摘要:本文介绍了两种在AltiumDesigner中批量替换元器件的实用方法。方法一通过“查找相似对象”功能,可精准匹配并批量修改器件参数;方法二利用ActiveBOM功能,在BOM表中直观操作器件替换,推荐使用第二种方法可使BOM管理更高效。这些技巧能有效减少物料种类、降低贴装成本,特别适用于电阻电容等常用器件的批量替换。关注公众号获取更多电子设计技巧。 阅读详情

相关推荐

Latex小白也能搞定!5分钟教你用Overleaf打造个性化简历(附免费模板)

本文为LaTeX新手提供了一份快速上手指南,教你如何在5分钟内使用Overleaf在线平台和现成模板,轻松打造专业且个性化的简历。文章详细介绍了从选择模板、替换个人信息到进行颜色、图标等个性化调整的完整流程,让你无需深入学习LaTeX语法,即可高效制作出排版精美、脱颖而出的求职简历。

2a4s6d8f0g的博客 682

Vue3瀑布流(Waterfall)

瀑布流图片展示组件,效果杠杠滴😁😁

Vue Amazing UI(Vue3 + TypeScript + Vite)组件库唯一开发维护者 1万+

xlinx项目系列之基于zynq-7020ISP图像处理

本Demo基于zynq-7020(正点原子启明星+OV5640+4.3'800x480)实现了ISP图像处理(将ov5640的isp关闭,在7020上实现ISP功能),输出到LCD和HDMI,软件基于SDK裸机开发,2592x1944@15fp。位置: xil_ip_repo/xil_isp_lite_1.0。项目获取链接:2.基于zynq-7020实现ISP图像处理。位置: xil_ip_repo/xil_vip_1.0。

JY6669991010的博客 2635

vue3+ts项目中使用水球图

此处绑定ref 是为了给图表数据 宽高是为了显示水球图。使用echarts必须给echarts图表设置宽高。在对应组件中引入也可在main.ts中引入水球图。

weixin_68531033的博客 2028

扬声器设计避坑指南:用Comsol分析反电动势对THD的影响(附案例文件)

本文深入探讨了扬声器设计中反电动势对总谐波失真的关键影响。通过COMSOL仿真,详细分析了BL值非线性、音圈电感变化等电磁-力-声耦合机制,并提供了从参数化建模到系统级优化的实战指南,帮助工程师精准量化并降低谐波失真,提升扬声器音质。

xx56789的博客 519

期末求生指南:手把手教你用F12开发者工具绕过百一测评的切屏检测(JavaScript/jQuery实战)

本文详细介绍了如何利用F12开发者工具绕过百一测评的切屏检测,通过分析JavaScript/jQuery中的blur()和focus()事件监听机制,提供实战技巧动态修改代码。文章涵盖事件监听定位、代码修改方法及应对高级检测机制的策略,适合需要临时解决线上考试限制的学生参考。

weixin_30731305的博客 447

什么是vuex?vuex如何使用?

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式, 采用集中式存储管理应用的所有组件的状态,解决多组件数据通信。要点:使用Vuex的好处:1、数据的存取一步到位,不需要层层传递2、数据的流动非常清晰3、存储在Vuex中的数据都是响应式的那么我们先来思考一个问题:什么样的数据适合存储到Vuex中?答案是:需要共享的数据Vuex的作用就是:频繁、大范围的数据共享vue官方提供的独立于组件体系之外的,管理公共数据的工具vuex分为五个大块state: 统一定义公共数据(类似于data(){retur

m0_70477767的博客 6万+

从谱峰搜索到多项式求根:Root-MUSIC算法原理与MATLAB实践

本文深入解析Root-MUSIC算法在阵列信号处理中的原理与应用,通过多项式求根替代传统MUSIC算法的谱峰搜索,显著提升计算效率和精度。文章详细介绍了算法核心思想、MATLAB实现步骤及工程优化技巧,帮助读者掌握这一高效的DOA估计方法。

weixin_30832143的博客 80

Vue—— vuex详解,彻底搞懂vuex

本文主要介绍vue中 Vuex 的相关知识点!!!!

Bonsoir777的博客 4万+

基于改进Unet的多场景水果图像分割与分类研究

本文针对复杂场景下的水果图像分割问题,提出了一种改进Unet模型。通过构建包含8类水果、3种成熟度及多种干扰场景的数据集,采用ResNet50与MobileNetV3作为骨干网络,并在跳跃连接层集成CBAM注意力机制。实验表明,改进模型在测试集上达到91.6%的mIoU,推理速度提升23%,特别在重叠水果和低光照场景表现突出。研究为农业视觉检测提供了有效解决方案。

AI的内部世界的博客 302

安卓新奇玩机工具全攻略___联发科MTK v6 限时免费 刷写固件工具操作

摘要:该文介绍一款限时免费的联发科V6刷机工具,支持小米、Vivo、Moto等多品牌设备,包括红米Note14Pro等机型(Klimt/Goya等代码)。工具需注册使用,提供EFS分区备份功能。作者提示工具可能触发杀毒警报,强调禁止非法用途,并说明部分联网工具可能失效。

小马哥的专栏 1312

vuex-persistedstate

Vuex持久化插件(vuex-persistedstate)解决刷新数据消失的问题 这篇文章主要介绍了Vuex持久化插件(vuex-persistedstate)-解决刷新数据消失的问题 页面刷新后,想保存页面未保存的数据。我们总是习惯于放在浏览器的sessionStorage和localStorage中。但是用了vue后,vuex便可以被应用了。 vuex优势:相比sessionStorage,...

weixin_44705688的博客 1万+

【YOLOv11】006、YOLOv11数据增强策略:Mosaic、MixUp等增强技术原理解析

摘要:YOLOv11在产线缺陷检测中遇到小尺寸瑕疵漏检问题,暴露了训练数据过于"干净"的缺陷。数据增强的核心是提升模型泛化能力,而非简单扩充数据。Mosaic增强通过多图拼接迫使模型处理多尺度目标,需注意边界框裁剪细节;MixUp通过线性插值使决策边界更平滑,但需避免类别冲突。自适应增强策略应随训练进度动态调整强度。实际应用中,需针对小目标、类别不平衡等场景调整增强参数,并确保验证与推理流程一致。数据增强应针对性解决具体问题,而非盲目尝试组合。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 365

Vuex的使用

Vuex 是一个 Vue 的 状态管理工具,状态就是数据。大白话:Vuex 是一个插件,可以帮我们管理 Vue 通用的数据 (多组件共享的数据)。例如:购物车数据 个人信息数actions: {// 一秒后, 给一个数, 去修改 num}, 1000)},

2303_80137294的博客 3601

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

VUEX

文章目录1.vue中各个组件之间传值2.了解vuex中的各个js文件的用途3. vuex使用步骤1.安装vuex2.在src目录下创建store模块,分别维护3 在store/index.js文件中新建vuex的store实例,并注册上面引入的各大模块4 在main.js中导入并使用store实例4.vuex取值:5.vuex存值6.调用ajax 1.vue中各个组件之间传值 1.父子组件 父组件...

尽力漂亮的博客 2154

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

Vuex介绍

一、Vuex简介 二、了解vuex中的各个js文件的用途 三、利用vuex同步存值 四、利用vuex取值 五、Vuex的异步加载问题及后台调用问题

m0_53151031的博客 4426

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

Vuex概述 和 Vuex的五大核心概念

Vuex 五大核心 和 分别对应的辅助函数

m0_63055116的博客 1555

Vuex的使用详细总结

Vuex是一个用于实现数据集中式状态(数据)管理的插件。数据由Vuex统一管理,其他组件都去使用Vuex中的数据。只要有其中一个组件去修改了这个共享的数据,其他组件会同步更新。全局事件总线关注点:组件和组件之间数据如何传递,一个绑定$on,一个触发$emit。数据实际上还是在局部的组件当中,并没有真正的让数据共享。只是数据传来传去。Vuex插件的关注点:共享数据本身就在Vuex上。其中任何一个组件去操作这个数据,其他组件都会同步更新。是真正意义的数据共享。多个组件之间依赖于同一状态。

奋斗的小前端 1882

Vuex数据状态持久化-vuex-persistedstate

vuex可以进行全局的状态管理,但刷新后刷新后数据会消失,这是我们不愿意看到的。怎么解决呢,我们可以结合本地存储做到数据状态持久化,但是太麻烦每次都要操作,强烈建议使用插件利用vuex-persistedstate插件.今天推荐两种vuex-persistedstate和vuex-persist 第一种 vuex-persistedstate插件 安装 npm install vuex-persistedstate --save 1.使用vuex-persistedstate默认存储到local

观千剑而后识器,操千曲而后晓声。 3757

Vuex 搭建vuex环境

在Vue中实现集中式状态(数据)管理的一个Vue插件,对Vue应用中多个组件的共享状态进行集中式管理(读/写),也是一种组件间通信的方式,且适用于任意组件间通信。

2301_78939167的博客 1017

Vuex 安装

Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。首先我们来了解一下Vuex的安装,后面我们再继续具体讲解什么是Vuex。 下载安装 Vuex 有三种安装方式,下面我们一起来看一下: 直接下载 我们可以直接下载vuex的文件,链接地址:https://unpkg.com/vuex。这个链接会一直指向 NPM 上发布的最新版本,目前的版本为vuex v3.1.2。 或者我们还可以根据自...

ivenqin的博客 1万+

vuex

vuex是什么 github站点: https://github.com/vuejs/vuex 在线文档: https://vuex.vuejs.org/zh-cn/ 简单来说: 对vue应用中多个组件的共享状态进行集中式的管理(读/写) 状态自管理应用 state: 驱动应用的数据源 view: 以声明方式将state映射到视图 actions: 响应在view上的用户输入导致的状态变化(包含n个更新状态的方法) 流程 actions函数内部调用commit触发某个mu

探鱼不是鱼 3792

VUEX的安装

vuex的安装 首先,vuex分3.x版本和4.x版本,分别对应vue2.0与3.0 也就是说,vue2.0只能安装vuex3.x版本,最高3.6.2,vue3.0才能装vuex4.x版本

qq_33515703的博客 1万+

【Vuex】对Vuex的理解

1.什么是vuex? Vuex 是专门为 Vue.js 设计的状态管理库。 这样就造成了一个问题,如果是多个组件共同使用的时候他们所使用的 state 状态中的数据源都是一样的,如果一个组件改变 state 初始状态数据源变化,就会导致其他的组件也会发生变化。 2.安装 vuex 3.vuex的核心就是 store(仓库) 每一个 Vuex 应用的核心就是 store(仓库)。store 基本上就是一个容器,包含应用中大部分的 state(状态)。Vuex 和 单纯的全局对象的区别:

m0_56349322的博客 1655

vuex的使用 vuex详解 vuex刷新数据丢失?vuex数据持久化-解决刷新数据消失的问题 看这一篇就够了

什么是vuex vuex是一个程序里面的状态管理模式,它是集中式存储所有组件的状态的小仓库,并且保持我们存储的状态以一种可以预测的方式发生变化。 那么什么情况下使用vuex呢 如果数据还有其他组件复用,建议使用vuex 如果需要跨多级组件传递数据,建议使用vuex 需要持久化的数据(如登录后用户的信息),建议使用vuex vuex的使用 在src路径下创建store文件夹,然后创建index.js文件,文件内容如下: import Vue from 'vue'; import Vuex from 'vuex

———————————————————————————————— 2483

Vue Vuex详解,一文彻底搞懂Vuex

本文深入解析 Vuex 的核心概念与工作流程,包括 State、Getters、Mutations、Actions 和 Modules 五大核心要素,并提供代码示例。Vuex 通过集中式状态管理解决组件间复杂数据传递问题,采用单向数据流确保状态变更可预测,支持模块化以提升大型应用的可维护性。文章还对比了 Vuex 的优势,如调试友好性和响应式更新机制,帮助开发者全面掌握这一 Vue.js 生态中的关键状态管理工具。

likuoelie的博客 1209
上一篇: Spa之表单验证+增删改查
下一篇: JWT
water_java
博客等级 码龄7年 9粉丝 124原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值