【Vuex】Vue从仓库中获取state中数据的方法

在Vue中,我们离不开组件间的通信,有父子通信、兄弟通信、跨级通信等。由此,数据的存储是一个需要考虑的问题,什么方法能够使数据容易读取还不浪费内存呢?这需要根据具体问题具体分析。

常见的方法有 props、$emit、$children、$root、vuex 等,今天我们重点分析一下使用vuex来存储数据并如何去获取数据。

Vuex是一个单一状态树,在全局拥有一个state存放数据,mutation进行同步操作,action进行异步操作,其中还有一个getter属性,相当于计算属性,用来返回state中定义的值。

一、存储数据

Vuex实现了模块化开发,我们建一个小仓库 tab.js 去存储一些数据并在 index.js 中进行引入:

// store/index.js
import Vue from 'vue'
import Vuex from 'vuex'
import tab from './tab.js'

Vue.use(Vuex)

export default new Vuex.Store({
    state: {
        count: 0
    },
    getters: {
        getCount(state) {
            return state.count
        }
    }
    modules: {
        tab
    }
})
// store/tab.js
export default {
    state: {
        isCollapse: false
    },
    // getters将state中定义的值暴露在this.$store.getters对象中
    getters: {
        getIsCollapse(state) {
            return state.isCollapse
        }
    },
    //mutations是修改state中的唯一手段,并且必须是同步函数
    mutations: {
        collapseClick(state) {
            state.isCollapse = !state.isCollapse
        }
    },
    actions: {}
}

二、获取数据

获取主仓库(index.js)的数据与获取分支小仓库(tab.js)的数据方法是有异同的:

同:

  • getters方法
console.log(this.$store.getters.getCount)  // 0
console.log(this.$store.getters.getIsCollapse)  // false

使用getters方法可以直接获取到每个仓库中返回的值。

异:

  • state方法
console.log(this.$store.state.count) // 0
conosle.log(this.$store.state.isCollapse)  // undefined
console.log(this.$store.state.tab.isCollapse) // false

直接获取分支小仓库中的数据是获取不到的,需要明确写出使用的是哪个小仓库中的数据。

三、辅助函数 mapState

从store实例中读取状态最简单的方法就是在计算属性中返回某个状态,当一个组件需要获取多个状态的时候,那么如果将这些状态都声明为计算属性会有些重复和冗余,为了解决这个问题,Vuex向我们提供了辅助函数 mapState,用来生成计算属性:

<template>
    <div>
        {{count}} {{isCollapse}}
    </div>
</template>

<script>
import { mapState } from 'vuex'

export default {
    computed: {
        ...mapState({
            count: state => state.count,
            isCollapse: state => state.tab.isCollapse,
            // 使用this时,必须使用常规函数
            getcount() {
                return this.$store.getters.getCount
            },
            getIsCollapse() {
                return this.$store.getters.getIsCollapse
            }
        })
    }
}
</script>

  • 3
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 2,你可以使用Vuex来管理应用程序的状态,包括获取数据。以下是一个简单的示例,演示如何在仓库获取数据: 1. 首先,确保已经安装了Vuex。可以使用npm或者yarn进行安装: ``` npm install vuex ``` 2. 在你的应用程序创建一个Vuex仓库。可以在`store.js`文件创建一个新的Vuex实例: ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { data: null }, mutations: { setData(state, payload) { state.data = payload } }, actions: { fetchData({ commit }) { // 在这里进行异步操作获取数据,例如使用axios发起请求 // 然后在获取数据后调用commit方法来更新仓库数据 const data = // 获取到的数据 commit('setData', data) } }, getters: { getData(state) { return state.data } } }) export default store ``` 在上面的代码,我们定义了一个名为`data`的状态,以及一个名为`setData`的mutation来更新该状态。我们还定义了一个名为`fetchData`的action,它可以用来异步获取数据并调用mutation来更新状态。最后,我们还定义了一个名为`getData`的getter来获取仓库数据。 3. 在你的Vue组件使用仓库数据。可以通过`mapGetters`来获取数据并在模板使用: ```vue <template> <div> <p>{{ data }}</p> <button @click="fetchData">获取数据</button> </div> </template> <script> import { mapGetters, mapActions } from 'vuex' export default { computed: { ...mapGetters(['getData']) }, methods: { ...mapActions(['fetchData']) } } </script> ``` 在上面的代码,我们使用`mapGetters`将`getData`映射到组件的计算属性,以便在模板使用。我们还使用`mapActions`将`fetchData`映射到组件的方法,以便在点击按钮时调用该方法。 现在,当你点击按钮时,它会触发`fetchData`方法,该方法会触发`fetchData` action,然后异步获取数据并将其存储在仓库的`data`状态。然后,你可以通过计算属性`getData`来获取仓库数据,并在模板使用它。 这就是在Vue 2使用Vuex获取数据的基本步骤。当然,你还可以根据实际需求进行更复杂的操作和配置。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值