Vue 开发实战生态篇 # 17:Vuex核心概念及底层原理

Posted 凯小默

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Vue 开发实战生态篇 # 17:Vuex核心概念及底层原理相关的知识,希望对你有一定的参考价值。

说明

【Vue 开发实战】学习笔记。

核心概念

  • State一this.$store.state.xxx 取值
  • Getter 一this.$store.getters.xxx 取值
  • Mutation 一this.$store.commit( "xxx" )赋值
  • Action 一 this.$store.dispatch( "xxx" )赋值
  • Module

底层原理

  • State:提供一个响应式数据
  • Getter:借助 Vue 的计算属性 computed 来实现缓存
  • Mutation:更改 state 方法
  • Action:触发 mutation 方法
  • Module:Vue.set 动态添加 state 到响应式数据中

实现一个 mini-vuex

主要实现响应式:mini-vuex.js

import Vue from 'vue'
const Store = function Store (options = ) 
  const state = , mutations= = options
  // 核心就是使用了vue的响应式数据   
  this._vm = new Vue(
    data: 
      $$state: state
    ,
  )
  this._mutations = mutations

Store.prototype.commit = function(type, payload)
  if(this._mutations[type]) 
    this._mutations[type](this.state, payload)
  

Object.defineProperties(Store.prototype,  
  state:  
    get: function()
      return this._vm._data.$$state
     
  
);
export default Store

App.vue

<template>
  <div id="app">
    <h1>count:count</h1>
    <button @click="$store.commit('increment')">min-vuex--commit:count++</button>
  </div>
</template>

<script>

export default 
  name: 'app',
  computed: 
    count() 
      return this.$store.state.count
    
  

</script>

<style>
#app 
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
  margin-top: 60px;

</style>

main.js

import Vue from 'vue'
import Vuex from './min-vuex'
import App from './App.vue'

Vue.use(Vuex)
Vue.config.productionTip = false

const store = new Vuex.Store(
  state: 
    count: 0,
  ,
  mutations: 
    increment(state) 
      state.count++
    
  
)

Vue.prototype.$store = store

new Vue(
  render: h => h(App),
).$mount('#app')

发现也是ok的

以上是关于Vue 开发实战生态篇 # 17:Vuex核心概念及底层原理的主要内容,如果未能解决你的问题,请参考以下文章

Vue 开发实战生态篇 # 16:如何在Vue中使用Vuex

Vue 开发实战生态篇 # 15:为什么需要Vuex

Vue 开发实战生态篇 # 22:Nuxt核心原理是什么?

Vue 开发实战基础篇 # 3:Vue组件的核心概念:事件

Vue 开发实战基础篇 # 4:Vue组件的核心概念:插槽

Vue实战篇二十四:分页显示