【Vue知识点】Vuex的详解

什么是Vuex?

   Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式 + 库,是一个Vue插件。它采用集中式存储管理应用的所有组件的状态(读/写),并以相应的规则保证状态以一种可预测的方式发生变化。这也是一种组件间通信的方式,且适用于任意组件间通信

为什么要使用Vuex?

   Vuex 可以帮助我们管理共享状态,并附带了更多的概念和框架。这需要对短期和长期效益进行权衡。

   如果您不打算开发大型单页应用,使用 Vuex 可能是繁琐冗余的。确实是如此——如果您的应用够简单,您最好不要使用 Vuex。一个简单的 store 模式就足够您所需了。但是,如果您需要构建一个中大型单页应用,您很可能会考虑如何更好地在组件外部管理状态,Vuex 将会成为自然而然的选择。

什么时候使用Vuex?

   1.多个组件依赖于同一种状态

   2.来自不同组件的行为需要变更同一状态

Vuex工作原理图解

Vuex的工作原理
Vuex的工作原理

  • 首先我们从环形Vuex中的state入手,state对象存放的就是一些需要共享的数据,然后通过render渲染到需要使用共享数据的各个组件上去
  • 组件调用dispatch分发到Actions上(dispatch函数需要传两个参数,第一个参数为数据的操作方法,第二个类型是数据),Actions对象上一定有一个key值对应数据的操作方法,再根据该方法对传过来的数据进行操作;
  • 在Actions中通过commit提交至Mutations(commit函数的参数于dispatch函数的参数一致),Mutations对象上一定有一个key值对应数据的操作方法,再根据该方法对传过来的数据进行操作,在Mutations中修改state的值,
  • Mutations修改完state的值后重新渲染页面,进入循环…

注意:

  • 只能在mutaions里修改state,actions不能直接修改state
  • 一般是在Actions中与服务器进行交互,例如dispatch传过来的参数只有数据的操作方法,这时候就得发送请求,请求后台数据再提交commit到Mutations
  • 组件可以直接通过Mutations修改State的值,如果组件没有与服务器进行交互,可以不经过Actions
  • Mutaions中调用Devtools这个vuex官方给出的开发者调试工具对State进行修改和修饰
  • 图中的Actions、Mutations、State必须得由store进行管理

Vuex中的各个核心概念

state

   state属性是Vuex中用于存放组件之间共享的数据。它采用的是单一状态树——用一个对象就包含了全部的应用层级状态。这也意味着,每个应用将仅仅包含一个 store 实例。单一状态树让我们能够直接地定位任一特定的状态片段,在调试的过程中也能轻易地取得整个当前应用状态的快照。

mutation

   官网的定义是:更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。
   不能直接调用一个 mutation 处理函数,唤醒一个 mutation 处理函数,你需要以相应的 type 调用 store.commit 方法

action

   Action 类似于 mutation,不同在于:

       Action 提交的是 mutation,而不是直接变更状态。
       Action 可以包含任意异步操作。

getter

   作为state的派生属性(类似于store的计算属性)

Module

   由于使用单一状态树,应用的所有状态会集中到一个比较大的对象。当应用变得非常复杂时,store 对象就有可能变得相当臃肿。
   Vuex 允许我们将 store 分割成模块(module)。每个模块拥有自己的 state、mutation、action、getter、甚至是嵌套子模块——从上至下进行同样方式的分割

辅助函数

   mapState、mapGetters、mapActions、mapMutations作为vuex中属性的辅助函数
       mapState可以帮助组件一次获取多个状态
       mapGetters将 store 中的 getter 映射到局部计算属性
       mapActions、mapMutations则可以帮助组件一次获取到多个方法

  • 对象展开运算符(例如…mapState) 可以帮助我们与组件的局部计算属性混合使用

具体如何使用Vuex(代码示例)

安装并使用Vuex

1.安装vuex
   在当前项目下的终端输入该语句:
                           npm i vuex

   注意:从2022年2月7日起,vue3成为了默认版本,执行npm i vuex安装的直接就是vue3,vue3成为默认版本的同时,vuex也更新到了4版本,执行npm i vuex,安装的就是vuex4版本,vuex4版本只能在vue3中使用,所以要安装vuex的指定版本npm i vuex@3。

2.全局注册vuex
全局注册

3.创建一个store文件夹
创建store文件夹

4.让所有组件都看得见store

  • 在main.js中引入store文件

引入store

  • 在创建vm时可以引入一个store值

引入store

  • 此时在所有的组件实例中多了一个$store属性,代表vuex安装成功。

在这里插入图片描述

代码案例

    设置几个按钮实现数字的增加,减少,以及奇数再加和过两秒后再加;可指定增加的数字大小
首先我们要确定需要共享的数据,将其放入state对象中
state
   将增加、减少、奇数再加和过两秒后再加的方法先写入actions中,并通过commit提交到Mutations对象中(Mutations中不能直接对)在组件中通过dispatch去触发actions对象中的方法,拿增加方法来举例:

//在组件中
addNum(){
      this.$store.dispatch('add',this.n)
    },
//在store文件中
actions:{
      add(context,value){
      console.log(context,value)
      context.commit('ADD',value)
    },
} 
mutations:{
     ADD(state,value){
      console.log(state,value)
      state.sum+=value
    },
}   

其他方法也是如此,就不一一展示了

  • PS:希望本文能够帮助学习Vue的你更好的掌握Vuex知识点。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue.js是一个流行的JavaScript框架,它允许您构建动态Web应用程序。Vuex是一个专为Vue.js应用程序开发的状态管理模式。它允许您在应用程序中管理和维护状态,例如用户信息、购物车、主题等。Vuex将状态存储在一个集中的存储库中,称为store。Vuex的核心概念包括state、mutations、actions和getters。 - state:存储应用程序级别的状态,可以通过store.state访问。 - mutations:用于更改状态的函数,必须是同步函数。可以通过store.commit方法调用。 - actions:用于处理异步操作的函数,可以包含任意异步操作。可以通过store.dispatch方法调用。 - getters:用于从store中获取状态的函数,可以通过store.getters访问。 下面是一个简单的示例,演示如何在Vue.js应用程序中使用Vuex: 1.安装Vuex ```shell npm install vuex --save ``` 2.创建store ```javascript import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { incrementAsync ({ commit }) { setTimeout(() => { commit('increment') }, 1000) } }, getters: { getCount: state => { return state.count } } }) export default store ``` 3.在Vue组件中使用store ```javascript <template> <div> <p>Count: {{ count }}</p> <button @click="increment">Increment</button> <button @click="incrementAsync">Increment Async</button> </div> </template> <script> import { mapGetters, mapActions } from 'vuex' export default { computed: { ...mapGetters([ 'getCount' ]) }, methods: { ...mapActions([ 'increment', 'incrementAsync' ]) } } </script> ``` 在上面的示例中,我们创建了一个名为count的状态,并定义了一个名为increment的mutation和一个名为incrementAsync的action。我们还定义了一个名为getCount的getter,用于从store中获取count状态。在Vue组件中,我们使用mapGetters和mapActions帮助程序将getter和action映射到组件中。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值