Vue2向Vue3过度Vuex核心概念state状态

阳光穿透心脏的1/2处 2024-03-24 21:51 130阅读 0赞

目录

    • 1 核心概念 - state 状态
      • 1.目标
      • 2.提供数据
      • 3.访问Vuex中的数据
      • 4.通过$store访问的语法
      • 5.代码实现
        • 5.1模板中使用
        • 5.2组件逻辑中使用
        • 5.3 js文件中使用
    • 2 通过辅助函数 - mapState获取 state中的数据
      • 1.第一步:导入mapState (mapState是vuex中的一个函数)
      • 2.第二步:采用数组形式引入state属性
      • 3.第三步:利用**展开运算符**将导出的状态映射给计算属性
    • 3 开启严格模式及Vuex的单项数据流
      • 1.目标
      • 2.直接在组件中修改Vuex中state的值
      • 3.开启严格模式

1 核心概念 - state 状态

在这里插入图片描述

1.目标

明确如何给仓库 提供 数据,如何 使用 仓库的数据

2.提供数据

State提供唯一的公共数据源,所有共享的数据都要统一放到Store中的State中存储。

打开项目中的store.js文件,在state对象中可以添加我们要共享的数据。

  1. // 创建仓库 store
  2. const store = new Vuex.Store({
  3. // state 状态, 即数据, 类似于vue组件中的data,
  4. // 区别:
  5. // 1.data 是组件自己的数据,
  6. // 2.state 中的数据整个vue项目的组件都能访问到
  7. state: {
  8. count: 101
  9. }
  10. })

3.访问Vuex中的数据

问题: 如何在组件中获取count?

  1. 通过$store直接访问 —> { { $store.state.count }}
  2. 通过辅助函数mapState 映射计算属性 —> { { count }}

4.通过$store访问的语法

  1. 获取 store
  2. 1.Vue模板中获取 this.$store
  3. 2.js文件中获取 import 导入 store
  4. 模板中: {
  5. {
  6. $store.state.xxx }}
  7. 组件逻辑中: this.$store.state.xxx
  8. JS模块中: store.state.xxx

5.代码实现

5.1模板中使用

组件中可以使用 $store 获取到vuex中的store对象实例,可通过state属性属性获取count, 如下

  1. <h1>state的数据 - {
  2. { $store.state.count }}</h1>
5.2组件逻辑中使用

将state属性定义在计算属性中 https://vuex.vuejs.org/zh/guide/state.html

  1. <h1>state的数据 - {
  2. {
  3. count }}</h1>
  4. // 把state中数据,定义在组件内的计算属性中
  5. computed: {
  6. count () {
  7. return this.$store.state.count
  8. }
  9. }
5.3 js文件中使用
  1. //main.js
  2. import store from "@/store"
  3. console.log(store.state.count)

每次都像这样一个个的提供计算属性, 太麻烦了,我们有没有简单的语法帮我们获取state中的值呢?

2 通过辅助函数 - mapState获取 state中的数据

mapState是辅助函数,帮助我们把store中的数据映射到 组件的计算属性中, 它属于一种方便的用法

用法 :

在这里插入图片描述

1.第一步:导入mapState (mapState是vuex中的一个函数)

  1. import {
  2. mapState } from 'vuex'

2.第二步:采用数组形式引入state属性

  1. mapState(['count'])

上面代码的最终得到的是 类似于

  1. count () {
  2. return this.$store.state.count
  3. }

3.第三步:利用展开运算符将导出的状态映射给计算属性

  1. computed: {
  2. ...mapState(['count'])
  3. }
  4. <div> state的数据:{
  5. { count }}</div>

3 开启严格模式及Vuex的单项数据流

1.目标

明确 vuex 同样遵循单向数据流,组件中不能直接修改仓库的数据

2.直接在组件中修改Vuex中state的值

在这里插入图片描述

Son1.vue

  1. button @click="handleAdd">值 + 1</button>
  2. methods:{
  3. handleAdd (n) {
  4. // 错误代码(vue默认不会监测,监测需要成本)
  5. this.$store.state.count++
  6. // console.log(this.$store.state.count)
  7. },
  8. }

3.开启严格模式

通过 strict: true 可以开启严格模式,开启严格模式后,直接修改state中的值会报错

state数据的修改只能通过mutations,并且mutations必须是同步的

在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,130人围观)

还没有评论,来说两句吧...

相关阅读