vuex

最后更新于:2022-04-02 03:37:07

[TOC] >[参考](https://uniapp.dcloud.io/vue-vuex) ## vuex ### 优势与使用场景 1. Vuex的状态存储是响应式的,可跟踪每一个状态变化,一旦它改变,所有关联组件都会自动更新相对应的数据。 2. 共享数据,解决了非父子组件的消息传递(将数据存放在state中)。 3. 统一状态管理,减少了请求次数,有些情景可以直接从内存中的state获取数据。 示例 1.在 uni-app 项目根目录下,新建 store 目录,在此目录下新建 index.js 文件。在 index.js 文件配置如下 ``` import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex);//vue的插件机制 //Vuex.Store 构造器选项 const store = new Vuex.Store({ state:{//存放状态 "username":"foo", "age":18 } }) export default store ``` 2.在`main.js`中导入文件。 ``` import Vue from 'vue' import App from './App' import store from './store' Vue.prototype.$store = store // 把 store 对象提供给 “store” 选项,这可以把 store 的实例注入所有的子组件 const app = new Vue({ store, ...App }) app.$mount() ``` ## 获取state三种方式 1.通过属性访问,需要在根节点注入 store 。 ``` ``` 2. 在组件中使用,通过 this.$store 访问到 state 里的数据。 ``` ``` 3. 通过 mapState 辅助函数获取。 - 当一个组件需要获取多个状态的时候,将这些状态都声明为计算属性会有些重复和冗余。 为了解决这个问题,我们可以使用 mapState 辅助函数 帮助我们生成计算属性,让你少按几次键: ``` ``` - 当映射的计算属性的名称与 state 的子节点名称相同时,我们也可以给 mapState 传一个字符串数组。 ``` ``` - 为了能够使用 this 获取组件自己的data数据,必须使用常规函数。 ``` ``` - 使用对象展开运算符 mapState 函数返回的是一个对象。使用对象展开运算符将多个对象合并为一个,以使我们可以将最终对象传给 computed 属性。极大地简化写法: ``` ```
';