Vuex从了解到实际运用(二),获取vuex中的全局状态(state,getters)

前言

上篇文章给大家讲了什么是Vuex以及Vuex的核心特点,这篇文章就带大家了解实际项目中如何使用Vuex。

vuex定义state

如下图,App.vue中我们引用了两个子组件。

在这里插入图片描述
然后我们在store中定义一个数据,让两个组件都能访问到
store/index.js

import { createStore } from 'vuex'

export default createStore({
  state: {
    things:[
      {name: "张三", age:"18"},
      {name: "李四", age:"17"},
      {name: "王五", age:"20"},
    ]
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

在创建项目的时候选上Vuex,项目初始化之后就会有store文件。因为它自动在main.js中进行了全局挂载,所以我们可以直接在组件中进行访问
one.vue:直接通过$store.state.things获取到值

<template>
  <div class="one">
    组件一
    <ul>
        <li v-for="item in $store.state.things" :key="item">
            <span>{{item.name}}</span>
            <span>{{item.age}}</span>
        </li>
    </ul>
  </div>
</template>

这样就成功拿到了值,组件二同理:

在这里插入图片描述

vuex计算属性

上面是直接在页面的template中可以通过$store.state.things获取到值,但往往我们需要对值进行监听,所在在computed中,但是在script中无法用以上方法获取到值,来看看怎么实现:

one.vue:

<template>
  <div class="one">
    组件一
    <ul>
        <li v-for="item in things" :key="item">
            <span>{{item.name}}</span>
            <span>{{item.age}}</span>
        </li>
    </ul>
  </div>
</template>

<script setup>
import { computed } from "vue"
import { useStore } from "vuex"
const store = useStore()
const things = computed(() => store.state.things)
</script>

我们需要引入vuex提供的useStore,利用它实例一个store对象。然后就可以通过store.state.things访问到值

通过getter获取全局状态

上面我们讲了通过state获取全局状态,来看看如何通过getter获取全局状态

在store/index.js中创建getter:

import { createStore } from 'vuex'
export default createStore({
  state: {
    things:[
      {name: "张三", age:"18"},
      {name: "李四", age:"17"},
      {name: "王五", age:"20"},
    ]
  },
  getters: {
    getProducts: (state) => {
      return state.things
    }
  },
  mutations: {
  },
  actions: {
  },
  modules: {
  }
})

然后在组件一的template中,我们可以通过$store.getters.getProducts获取到值。那么getters和state这两种方法有啥不同呢?在getters中我们可以对数据进行处理:
下面新增了一个resetProducts方法,在名字前后加上了 **

getters: {
    getProducts: (state) => {
      return state.things
    },
    resetProducts: (state) => {
      return state.things.map((things) => {
        return {
          name: `**${things.name}**`
        }
      })
    }
  },

然后到组件一中,我们使用$store.getters.resetProducts获取到值。
这样我们可以在getters中对初始数据进行统一的微调,方便组件进行使用

在这里插入图片描述

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Beiyux

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值