vuex 解析

作者: zhudying | 来源:发表于2021-03-03 11:55 被阅读0次

vuex 是 Vue 配套的 公共数据管理工具,它可以实现数据的共享,在复杂的项目中避免了父子/子父/祖孙间通讯的复杂性,解决了复杂的网状通讯,实现了数据的单项流动。

- vuex的原理
image

Vuex 实现了一个单向数据流,在全局拥有一个 state 存放数据,当组件要更改 state 中的数据时,必须通过 mutations中的方法进行修改,mutations 提供了订阅者模式供外部插件调用获取 state 数据的更新。

所有异步操作(常用于调用后端接口异步获取数据)或批量的同步操作需要走 actions,actions 通过触发 mutations 中的方法来修改 state 的数据。

数据变更后相应推送给组件,组件重新渲染到视图上。

vuex 是 vue 的状态管理器,存储的数据是响应式的。但是并不会保存起来,刷新之后就回到了初始状态,我们可以在 vuex 里数据改变的时候把数据保存到 localStorage/sessionStorage 里面,刷新之后如果 localStorage/sessionStorage 里有保存的数据,赋值给 store 里的 state。

- vuex的优点
  • 能够在 Vuex 中集中管理共享的数据,易于开发和后期维护
  • 能够高效的实现组件之间的数据共享,提高开发效率
  • 存储在 Vuex 中的数据都是响应式的,能够实时保持数据与页面的同步
- vuex的使用(vue2.x)
  1. 安装vuex
npm install vuex --save  
cnpm install vuex --save
  1. 导入 vuex
import Vuex from 'vuex'
Vue.use(Vuex) // 挂载
  1. 创建 store 对象
const store = new Vuex.Store({  
    
    state: { },
    getters:{},
    mutations:{},
    actions:{}
})  
export default store;
  1. 将 store 对象挂载到 vue 实例中
new Vue({
    el: '#app',
    render: h => h(app),
    store
})
  1. 调用方法
// state
$store.state.xx
// getters
$store.getters.xx
// mutations
$store.commit('名称','参数')
// actions
$store.dispatch('名称','参数')
- 使用辅助函数 mapGetters/mapActions
  1. 创建store 对象
import Vue from "vue";
import Vuex from "vuex";
import getters from "./getters";
import user from "./components/user";

Vue.use(Vuex);

export default new Vuex.Store({
  // 注册模块
  modules: {
    user
  },
  getters
});
  1. getter对象(getters.js)
const getters = {
  name: state => state.user.name
};
export default getters;
  1. state数据(user.js)
import {  logout } from '@/api/login';

const state = {
  // 读取缓存数据
  name: localstorage.getItem( 'name' ) || ''
};

const mutations = {
  SET_NAME(state, name) {
    state.name= name
    // 缓存,避免刷新后重置
    localstorage.setItem( 'TOKEN',state.name,) 
  }
};

const actions = {
  // 登出
  LOGOUT({ state, commit, dispatch }) {
    return new Promise((resolve, reject) => {
      logout().then(res => {
        let { data } = res
        commit('SET_NAME', '')
        resolve(data)
      }).catch(error => {
        reject(error)
      })
    })
  },
};

export default {
  state,
  mutations,
  actions
};
  1. 使用 mapGetters/mapActions
import {mapActions, mapGetters } from 'vuex';
computed: {
  ...mapGetters(["name"]),
},
methods: {
  ...mapActions({
    LOGOUT: 'LOGOUT'
  })
}

相关文章

  • 关于一些Vue的文章。(1)

    原文链接我的blog,欢迎STAR。 今天分享的一篇文章是关于vuex的源码解析的,链接vuex源码解析,在现在所...

  • vuex 解析

    vuex 是 Vue 配套的 公共数据管理工具,它可以实现数据的共享,在复杂的项目中避免了父子/子父/祖孙间通讯的...

  • Vuex 2.0 学习笔记(二):源码阅读

    上一章总结了 Vuex 的框架原理,这一章我们将从 Vuex 的入口文件开始,分步骤阅读和解析源码。由于 Vuex...

  • Vuex源码解析

    写在前面 因为对Vue.js很感兴趣,而且平时工作的技术栈也是Vue.js,这几个月花了些时间研究学习了一下Vue...

  • VUEX源码解析

    /plugins/devtool.js 浏览器开发者工具支持监控VueX /plugins/logger.js r...

  • Vuex源码解析

    手写vuex核心代码 vuex基本用法 分析 我们是通过new Vuex.store(option)获得一个sto...

  • (二十一)VueCli3.0全栈——解析token并存储到vue

    本节主要内容:解析token里面的数据并存储到vuex中。 1、安装解析token的模块 到客户端 cd c...

  • Vuex原理解析

    vue是目前最流行的前端框架之一,vuex则是一个状态管理器,负责管理vue中各个对象的状态变化并同步渲染到页面上...

  • vuex 原理解析

    vuex的原理关键:使用vue实例管理状态

  • vuex源码解析(2.3.1)

    在网上有找到一些关于vuex源码分析的文章,有的写的很不错,挺详细的。但是在阅读的过程中还是发现很多地方不理解,所...

网友评论

    本文标题:vuex 解析

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