vuex是什么 vuex是一个专门为vue开发的状态管理工具,它采用集中式存储管理应用的所有组件的状态,其核心是state。
vuex中有什么 state:存放状态数据的地方,其中数据是响应式的,数据改变对应组件的数据也会跟新改变,禁止直接改变state中的数据否则数据无法被调试工具监测。
getter:可理解为store的计算属性,能读取state中的数据。
mutations:装着处理数据逻辑方法的集合体,是该改变state中数据的唯一方法,修改数据是同步的。
actions:提交mutations修改数据,与mutations功能类似,但修改数据是异步的。
modules:当store过于臃肿时,可使用modules将store分割成模块,每个模块中都有自己的state、getter、mutations、actions
vuex使用示例
文章图片
场景:将store中的数据在ComOne组件中渲染出来,在ComTwo组件中分别同步异步修改。
1、一般使用"vue create xxx"命令创建的项目的默认选项是自带vuex的,无需手动添加。
2、vuex的各种状态和方法是写在src下的store里的index.js中的。
3、在state中存入需要共用的数据:
文章图片
4、在store中分别写出vuex的getters、mutations、action(modules在数据臃肿时也可将之模块化写出):
文章图片
5、在ComOne中导入vuex中的辅助函数mapState与mapGetters:
文章图片
6、在ComOne中用辅助函数映射出vuex的state与getters作为计算属性:
文章图片
7、在页面直接使用映射出的数据:
文章图片
8、在ComTwo中导入修改vuex数据的辅助函数mapMutations与mapActions:
文章图片
9、在ComTwo中使用辅助函数生成修改vuex对应数据的方法:
文章图片
10、直接在页面中通过回车事件触发修改vuex的方法:
文章图片
11、在第一行输入框中输入数据按下回车后name与age会立刻更新修改(同步),在第二行输入框中输入数据按下回车后name与age会等待一秒后更新修改(异步)。
文章图片
具体实现代码 store的index.js:
import Vue from 'vue'
import Vuex from 'vuex'Vue.use(Vuex)export default new Vuex.Store({
//state存放状态,
state: {
name: "tom",//需要共用的数据
age: "22"
},
//getter为state的计算属性
getters: {
getName: (state) => state.name,//获取name
getAge: (state) => state.age,
},
//mutations可更改状态的逻辑,同步操作
mutations: {
setName: (state, data) => state.name = data,
setAge: (state, data) => state.age = data,
},
//提交mutation,异步操作
actions: {
acSetName(context, name) {
setTimeout(() => {
//延时1秒提交至mutations中的方法
context.commit("setName", name);
}, 1000);
},acSetAge(context, age) {
setTimeout(() => {
context.commit("setAge", age);
}, 1000);
}
},
// 将store模块化
modules: {
}
})
【vue|vuex的使用】ComOne.vue:
name:>{{ getName }}
age:>{{ getAge }}
>
import { mapState, mapGetters } from "vuex";
//导入vuex的辅助函数
export default {
components: {},
//计算属性computed无法传递参数
computed: {
// 映射 state 中的数据为计算属性
...mapState(["name", "age"]),
// 映射 getters 中的数据为计算属性
...mapGetters(["getName", "getAge"]),
},
};
>
.wrapper {
color: #fff;
}
ComTwo.vue:
>同步修改:
>异步修改:
>
import { mapMutations, mapActions } from "vuex";
//导入vuex的辅助函数
export default {
components: {},
data() {
return {
nameInp: "", //绑定输入框的值
ageInp: "",
acNameInp: "",
AcAgeInp: "",
};
},
methods: {
//用于生成与 mutations 对话的方法,即:包含 $store.commit(xx) 的函数
...mapMutations(["setName", "setAge"]),
//用于生成与 actions 对话的方法,即:包含 $store.dispatch(xx) 的函数
...mapActions(["acSetName", "acSetAge"]),
},
};
>
.wrapper {
}
推荐阅读
- vue|vue中代理解决跨域
- JavaScript中通过style修改属性时需要添加“px”
- vue.js|vue开发搜索框防抖的优化和日常报错,
- vue项目|vue移动端 利用防抖的原理 ---实现搜索页面防抖操作
- vue.js|vue中搜索实现防抖
- vue.js|vue3 el-input 搜索实现防抖
- Vue.js|Vue移动端项目——搜索联想建议功能的实现(结合watch属性和使用lodash防抖节流)
- vue|Vue + ElementUI+ el-autocomplete 组件的防抖方案的懒加载
- 微信小程序|【uni-app】搜索框的防抖处理