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

这篇具有很好参考价值的文章主要介绍了Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

知识回调(不懂就看这儿!)

知识专栏 专栏链接
Vuex知识专栏 https://blog.csdn.net/xsl_hr/category_12158336.html?spm=1001.2014.3001.5482
Vuex从了解到实际运用(一)彻底搞懂什么是Vuex https://blog.csdn.net/XSL_HR/article/details/130522551
【Vuex快速入门】vuex基础知识与安装配置 https://blog.csdn.net/XSL_HR/article/details/128515917

有关Vuex的相关知识可以前往Vuex知识专栏查看复习!!
vuex官方文档传送门

场景复现

上期文章介绍了vuex是什么和vuex的一些核心特点,本期文章将以项目实战为主,上手使用vuex

项目实战

vuex定义一个store实例

首先定义两个组件,分别为One.vue和Second.vue,将两个组件挂载到App.vue组件下。
Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)

在store中定义数据

接下来我们在store中定义数据,使得两个小组件都能访问到store里的值。

import { createStore } from 'vuex'

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

注意使用store实例时,需要提前创建store实例

  • 可以选择在项目初始化时勾选vuex,这样项目初始化成功后,store实例会被直接挂载到全局的main.ts或者main.js文件内。
  • 有的初始化工具无法选择vuex,则需要我们手动导入和挂载。
    Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)

在组件中获取值

分别在One.vue和Second.vue组件中,通过$store.state.things获取到值(这里是因为在store中定义的数据名为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从了解到实际运用(二)——获取vuex中的全局状态(state getters)

vuex的计算属性

上面的操作主要是直接通过$store.state.things来获取到值,但是我们往往需要对值进行实时监听和更新,所以此时我们需要vuex的计算属性——computed,但是在script中无法用以上的方法获取到值,下面我们来看看解决办法:👇👇👇

<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>

计算属性是非常常用的,可以将更多的逻辑层代码放在script中进行编写,优化代码结构。
不过,使用计算属性之前,我们需要先引入vuex提供的useStore,利用它实例化一个store对象,然后对store对象进行操作,访问到我们需要的值。

此时我们可以看看运行出来的效果:👇👇👇
Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)

通过getters获取全局状态

上面我们介绍了如何通过state来获取全局状态,下面我们来尝试用另一种方法——getter来获取全局状态

首先我们需要在store中创建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: {
  }
})

getters中我们定义了一个新的方法getProduct,此时在组件的代码中,就可以在script中引入并调用这个方法。

$store.getters.getProducts

state和getters获取全局状态的区别

state和getters都能够获取到全局状态,那么二者有什么区别呢?

  • state只能够获取到全局状态,并不能对状态数据进行微调
  • getters既能获取到全局状态,还能对数据进行调整

下面我们在getters中新增一个resetProducts方法,在每个数据的前面贴上>>>

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

此时我们来看看调用此方法之后的效果:👇👇👇
Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)
很显然,getters中调用的方法既能够获取到全局的状态数据,而且更灵活,能够根据需求对全局的状态进行处理。一般将数据处理的方法放在getters中,将各个组件的功能进行组件化,保证父组件的层次结构清晰明了。


以上就是关于实现通过getters和state获取vuex的全局状态的知识分享,相信看完这篇文章的小伙伴们一定能运用这些方法在项目开发中。当然,可能有不足的地方,欢迎大家在评论区留言指正!

下期文章将介绍vue最新状态管理工具Pinia的入门知识~
感兴趣的小伙伴可以订阅本专栏,方便后续了解学习~
觉得这篇文章有用的小伙伴们可以点赞➕收藏➕关注哦~

Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)文章来源地址https://www.toymoban.com/news/detail-435000.html

到了这里,关于Vuex从了解到实际运用(二)——获取vuex中的全局状态(state getters)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Vue项目保持用户登录状态(localStorage + vuex 刷新页面后状态依然保持)

            在前端项目开发中,实现用户的登陆注册功能时常常会有一个问题,那就是我们设置的登录状态,在浏览器页面刷新后就消失了,这其实只是因为我们没有保存用户状态。 这里小马演示使用的是 localStorage   +   vuex 方法(其他诸如 sessionStorage、cookie 等用法相同,

    2023年04月08日
    浏览(38)
  • 微信小程序通过 wxministore 实现类似于vuex的全局装填数据管理

    首先 我们打开终端 引入依赖 然后 如果你是新版开发者工具 就 构建一下 如果你是 老版本的 微信开发者工具 就打开右上角详情 选择本地管理 勾选 使用 npm 模块 然后 在根目录下创建一个 store.js 当然建在哪是你自己决定的 反正 后面能引入到就好 然后 store.js 编写代码如下

    2024年02月05日
    浏览(43)
  • 从Vuex中获取数据,数据不更新

    问题: Vuex中的数据修改之后,子组件的数据不会实时更新,需要切换到其他页面,在切换回来数据才会更新,渲染页面 子组件代码: 为什么会出现这种情况呢? 原因是因为在在获取Vuex数据时,是在页面加载前进行获取,在加载完毕之后,Vuex的数据修改后,你子组件的页面

    2024年02月13日
    浏览(42)
  • Vue-Element-Admin项目学习笔记(6)Vuex状态管理

    前情回顾: vue-element-admin项目学习笔记(1)安装、配置、启动项目 vue-element-admin项目学习笔记(2)main.js 文件分析 vue-element-admin项目学习笔记(3)路由分析一:静态路由 vue-element-admin项目学习笔记(4)路由分析二:动态路由及permission.js vue-element-admin项目学习笔记(5)路由分析

    2024年02月09日
    浏览(49)
  • 一篇文章让你彻底了解vuex的使用及原理(上)

    文章讲解的 Vuex 的版本为 4.1.0 ,会根据一些 api 来深入源码讲解,帮助大家更快掌握 vuex 的使用。 使用 Vue 实例的 use 方法把 Vuex 实例注入到 Vue 实例中。 use 方法执行的是插件的中的 install 方法 src/store.js 从上面可以看到 Vue 实例通过 provide 方法把 store 实例 provide 到了根实例

    2023年04月23日
    浏览(60)
  • vue2(Vuex)、vue3(Pinia)、react(Redux)状态管理

    Vuex 是一个专为 Vue.js应用程序开发的状态管理模式。它使用集中式存储管理应用的所有组件的状态,以及规则保证状态只能按照规定的方式进行修改。 State(状态) :Vuex 使用单一状态树,即一个对象包含全部的应用层级状态。这个状态树对应着一个应用中的所有状态。 Gett

    2024年01月23日
    浏览(48)
  • vuex中的modules使用

             模块,向store注入其他子模块,可以将其他模块以命名空间的方式引用。           为了拆分state中的数据,提高可维护性,防止修改时的覆盖和重名。 前置条件: (1)在工程的 /src/store目录下建modules文件夹。 (2)modules文件夹下建shop.js: const shopCar = {     name

    2024年04月22日
    浏览(35)
  • vuex缓存接口返回的数据,只在首次使用调用接口,之后使用vuex中的缓存值

    场景:同一个接口在多个页面调用 问题:重复访问,导致对服务器的重复请求,降低用户体验。 解决:使用vuex的异步处理,第一次访问时将数据缓存,下次访问直接从缓冲中获取,提高访问速度 注意:刷新页面时,会把当前页面占用的缓存释放掉,再重新加载新的缓存,如

    2024年02月12日
    浏览(47)
  • Vue3解决Vuex异步获取数据,页面先渲染问题

    在vuex中异步请求数据,页面获取vuex中的数据渲染页面时,数据还未返回时,页面还未渲染。 解决方法: 在数据还未返回时,先不渲染页面结构,使用骨架屏等待数据请求 等待数据返回之后,设置isShow为true,同时重新渲染页面 完美解决Vue3数据异步获取为完成,页面提前渲

    2024年02月11日
    浏览(54)
  • JavaEE-Nuxt中的vuex

    参考:https://v2.nuxt.com/docs/directory-structure/store 步骤一:创建 store/index.js 添加一个 counter变量,并可以继续累加操作 步骤二:在页面中,使用 步骤一:创建其他模块 store/book.js 步骤二:使用指定模块中的数据

    2024年01月25日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包