mapState映射

mapState映射可以将

State中的数据yourName映射到本地this.yourName,

使用之前要将相应的文件引入

state:

页面组件:

原本使用state中数据的方法:

使用mapState之后:

除了使用这种数组的方式,mapState里面也可以放一个对象

意思是将公用数据中的city映射到此组件中的计算属性currentCity中

所以就可以这样使用:

同理也有mapActions, mapMutations

将mapActions和mapMutations放在methods方法中

`mapState` 是 Vuex 提供的一个辅助函数,用于在 Vue 组件中映射 Vuex store 中的 state 到组件的计算属性,方便在组件中使用 store 中的数据。 ### 使用方法 在组件中使用 `mapState` 时,需要先引入它,然后在计算属性中使用。`mapState` 有两种使用方式:对象形式和数组形式。 #### 数组形式 当使用数组形式时,数组中的元素是 store 中 state 的属性名,映射后的计算属性名与 state 属性名相同。 ```vue <template> <div> <!-- 使用映射后的计算属性 --> <p>{{ count }}</p> </div> </template> <script> import { mapState } from 'vuex'; export default { computed: { // 使用 mapState 映射 state 到计算属性 ...mapState(['count']) } }; </script> ``` #### 对象形式 对象形式可以自定义计算属性的名称,对象的键是计算属性名,值是 state 的属性名或一个函数。 ```vue <template> <div> <!-- 使用自定义名称的计算属性 --> <p>{{ myCount }}</p> </div> </template> <script> import { mapState } from 'vuex'; export default { computed: { ...mapState({ // 自定义计算属性名 myCount: 'count', // 也可以使用函数形式 doubleCount: state => state.count * 2 }) } }; </script> ``` ### 原理 `mapState` 的原理是利用 Vue 的计算属性特性。计算属性是基于它们的依赖进行缓存的,只有在依赖发生变化时才会重新计算。`mapState` 函数会返回一个对象,对象中的每个属性都是一个计算属性的 getter 函数,这些 getter 函数会从 Vuex store 中获取相应的 state 值。 在组件渲染时,Vue 会根据计算属性的依赖关系来决定是否重新计算计算属性的值。当 store 中的 state 发生变化时,依赖这些 state 的计算属性会自动更新,从而触发组件的重新渲染。 ```javascript // 简化的 mapState 实现原理 function mapState(stateKeys) { const computedObj = {}; stateKeys.forEach(key => { computedObj[key] = function() { return this.$store.state[key]; }; }); return computedObj; } ``` ### 示例 下面是一个完整的示例,展示了如何在 Vue 组件中使用 `mapState`。 ```vue <template> <div> <p>Count: {{ count }}</p> <p>Double Count: {{ doubleCount }}</p> <button @click="increment">Increment</button> </div> </template> <script> import { mapState } from 'vuex'; export default { computed: { ...mapState({ count: state => state.count, doubleCount: state => state.count * 2 }) }, methods: { increment() { this.$store.commit('increment'); } } }; </script> // store/index.js import Vue from 'vue'; import Vuex from 'vuex'; Vue.use(Vuex); export default new Vuex.Store({ state: { count: 0 }, mutations: { increment(state) { state.count++; } } }); ```
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值