浅学状态管理VueX

举报
QGS 发表于 2023/12/04 23:26:00 2023/12/04
【摘要】 浅学状态管理VueX

https://vuex.vuejs.org/zh/guide/

每一个 Vuex 应用的核心就是 store(仓库)。“store”基本上就是一个容器,它包含着你的应用中大部分的状态 (state)Vuex 和单纯的全局对象有以下两点不同:

  1. Vuex 的状态存储是响应式的。当 Vue 组件从 store 中读取状态的时候,若 store 中的状态发生变化,那么相应的组件也会相应地得到高效更新。
  2. 你不能直接改变 store 中的状态。改变 store 中的状态的唯一途径就是显式地提交 (commit) mutation。这样使得我们可以方便地跟踪每一个状态的变化,从而让我们能够实现一些工具帮助我们更好地了解我们的应用。

状态自管理应用包含以下几个部分:

  • state,驱动应用的数据源;
  • view,以声明方式将 state 映射到视图;
  • actions,响应在 view 上的用户输入导致的状态变化。


Vuex简单来说是数据共享的一个容器



Vuex 是一个专为 Vue.js 应用程序开发的状态管理模式。它采用集中式存储管理应用的所有组件的状态,并以相应的规则保证状态以一种可预测的方式发生变化。Vuex 也集成到 Vue 的官方调试工具 devtools extension (opens new window),提供了诸如零配置的 time-travel 调试、状态快照导入导出等高级调试功能。

 

安装

npm install vuex

使用

import Vue from 'vue'

import Vuex from 'vuex'

Vue.use(Vuex)

 

const store = new Vuex.Store({

    state: {

      count: 0

    },

    mutations: {

      increment (state) {

        state.count++

      }

    }

  })

 

export default store  //导出


main.js导入

State

应用方式一

{{this.$store.state.count}}


应用方式二 computed

应用方式三 mapState辅助函数

computed:{
    //1、箭头函数
    count: state => state.count
    // 2、传字符串参数 'count' == state => state.count
     countAlias: 'count',
    //3、使用this获取局部状态,必须使用常规函数
    countState(state){
      return state.count + this.localCount
    }

    // count(){
    //   return this.$store.state.count
    // }
  }

最简便的方式

//最简便的方式
  computed: mapState([
    'count'
    ]),


Getters

通过属性访问

只显示已经完成的(done:true)

getters: {
        doneTodos: state => {
          return state.todos.filter(todo => todo.done)
        },

通过方法访问
<h3>getters通过方法访问:
      <li v-for="todo in this.$store.getters.doneTodos" :key="todo.id">{{todo.text}}</li>
    </h3>

<h3>getters通过方法访问:{{this.$store.getters.doneTodos}}</h3>

MaopGetters辅助函数
 <ul>
      getters通过mapGetters访问:
      <li v-for="todo in doneTodos" :key="todo.id">{{todo.text}}</li>
    </ul>












【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。