vuex

作者: 94very | 来源:发表于2019-04-27 22:59 被阅读0次

    vuex 是 vue 中的状态管理工具,方便更好统一,快捷,高效的处理一些数据,也是学好 vue 的核心,所以我在此进行了记录,以便以后翻回来继续学习。



需要安装 vue vuex,vue 安装脚手架时已安装
# 安装 vuex
npm install vuex --save

# 创建状态管理文件夹(vuex)
{
    store
      index.js
      state.js
      actions.js
      getters.js
      mutations.js
}


src/main.js
...
import store from './store'

new Vue({
    ...
    store,
    ...
})

在 index.js 文件中对 vue 和 vuex 实例化

import vue from 'vue'
import vuex from 'vuex'


这里参照了https://juejin.im/entry/58b7a6cd61ff4b006cd56193的博客。
导出 vuex,下面使用了 es6 的语法,当属性名称与变量名相同时,可以简单书写名称。
# store/index.js
export default new Vuex.Store({
    state,
    getters,
    actions,
    mutations
})

# state.js
# 存放状态数据
export default {
    list: [],
    showChildComponent: true,
    message: '给各个组件的消息'
}

# mutations.js
# 只能同步更改 state 中的数据
export default {
    add(state, data) {
        state.list.push(data)                     # 追加数据
    }
}

# getters.js
# state 中派生出来的状态,如将 state 中某个状态进行过滤获取的新状态
export default {
    filterList(state) {
        let len = state.list.length;
        let newList;
        for (let i = 0; i < len; i++) {
            let element = state.list[i];
            # state.list[i] 中的数组长度超过 10 时,存入 newList 中
            element.length > 10 ? newList.push(element) : null;
        }
    }
} 

# actions.js
# 可以异步的更改数据
export default {
    add({commit, state}, data) {
        setTimeout(function () {            
            # 延迟 2000 毫秒执行 mutations 中的 add 函数
            commit('add', data); 
        }, 2000)
    }
}


写在 index.js 文件中时(即不创建 state.js getter.js 等文件)
export default new Vuex.Store({
    state: {
        list: [],
        showChildComponent: true,
        message: '给各个组件的消息'
    },
    mutations: {
        add(state, data) {
            state.list.push(data)                     
        }
    },
    getter: {
        filterList(state) {
            let len = state.list.length;
            let newList;
            for (let i = 0; i < len; i++) {
                let element = state.list[i];
                element.length > 10 ? newList.push(element) : null;
            }
        }
    },
    action: {
        add({commit, state}, data) {
            setTimeout(function () {            
                commit('add', data); 
            }, 2000)
        }
    }
})

组件引用 vuex 中的数据

# 因为在 src/main.js 中引入 store 文件夹,所以全局组件都可以通过以下方法引入 vuex 中的数据
export default {
    name: 'Home',
    # 用 data 接收值,不能及时更新而 computed 可以
    computed: {
        message () {
            return this.$store.state.message
        }
    }
}

# mapState 辅助函数
import { mapState } from 'vuex'
export default {
    computed: mapState({
        list: 'list'
    })
}

# ...是对象展开符的扩展
import { mapState, mapMutations } from 'vuex'
export default {
    computed {
        ...mapState({
            list: 'list'
        })
    },
    methods: {
        ...mapMutations(['add']),
        # handleClick 触发事件,将 data 数据通过 mapMutations 中的 add 方法追加
        #  到 state 中 list 数组之后
        handleClick (data) {
            add(data)
        }
    }
}


    该文章后面还会继续追加自己不懂的内容,希望该文章方便到他人。

相关文章

  • VUEX基本介绍,包含实战示例及代码(基于Vue2.X)

    VUEX 1 VUEX基本介绍 1.1 官方API 1.2 什么是vuex 1.3 Vuex使用场景 1、Vuex...

  • 【文档笔记】-Vuex

    什么是vuex? vuex文档: https://vuex.vuejs.org/zh/[https://vuex....

  • vuex配置

    vuex配置 目录 vuex的五个核心 配置vuex vuex持久化 一、vuex五个核心概念 State 定义状...

  • Vuex

    安装Vuex cnpm install vuex --save-dev Vuex是什么? 这是[Vuex的官网](...

  • Vuex

    1.Vuex概述 2.Vuex基本使用 3.使用Vuex完成todo案例 1.Vuex概述 Vuex是实现组件全局...

  • vuex

    Vuex介绍: Vuex官网:http://vuex.vuejs.org/ Vuex是实现数据状态管理的技...

  • vuex+axios 的开发流程记录

    相关文档 vuex: https://vuex.vuejs.org/zh/ 是否有必要使用vuex vuex是vu...

  • 2019-06-07

    import Vue from 'vue'import Vuex from 'vuex'Vue.use(Vuex)...

  • 配置 vuex 和 vuex 本地持久化

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

  • vuex

    配置 vuex 和 vuex 本地持久化 目录 vuex是什么 vuex 的五个核心概念State 定义状态(变量...

网友评论

      本文标题:vuex

      本文链接:https://www.haomeiwen.com/subject/oegqbqtx.html