寫一個簡單的demo理解vuex

CoolChenCool發表於2017-12-28

對vuex一次小小的總結

當我們要用去使用一個東西時,首先要知道它是什麼,用來幹什麼。
Vuex 是一個專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式儲存管理應用的所有元件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化
之前用其他框架去寫元件時,巢狀太深了,一直往裡面傳值太過於繁瑣,而且去找一個狀態太麻煩了
這種問題就是vuex官方所說的:遇到多個元件共享狀態時,單向資料流的簡潔性很容易被破壞,多個檢視依賴於同一狀態,來自不同檢視的行為需要變更同一狀態

我對vuex理解就是一個資料倉儲,相關的增刪改查功能是全域性性的,不用誰去通知誰,全都來告訴我就好了。

今天寫了一個小demo

寫一個簡單的demo理解vuex

程式碼片段:

   <div>
        <span>name:</span><b>{{name}}</b><span>age:</span><b>{{age}}</b>from   mapState裡
      </div>
      <div> 
      <span>name:</span><b>{{nameGetter}}</b><span>age:</span><b>{{ageGetter}}</b> from mapGetters
      </div>
     <button @click="changeAge(10)">vue-mutations</button> 
      <button @click='actionChange'>vue-action</button>
      <p>{{id}}<br>(mutations每次加10,action每次加5)</p>
      <button @click="changeName('Mutations改名字')">Mutations改名字</button>
       <button @click="actionChangeName('action改名字')">action改名字</button>
       <p>(action修改2秒後執行)</p>
      <div style="margin-top:50px"> 
         <button @click="go">進入子路由</button>
      </div>
      <div>
       <router-view></router-view>
      </div>
複製程式碼

js

import other from "./other";
import { mapMutations, mapState, mapGetters, mapActions } from "vuex";//引入輔助函式
export default {
 data() {
   return {};
 },
 created() {},
 computed: {
   ...mapState(["id", "age", "obj", "name"]),   //把mapState理解成data
   ...mapGetters(["nameGetter", "ageGetter"]) //mapGetters相當於計算屬性
 },
 methods: {
   go() {
     this.$router.push({ path: "/hello/123", component: other });
   },
   actionChange() {
     this.actionChangeAge(5);
   },
   ...mapMutations({
     changeAge: "changeAge",  //mapMutations 唯一提交方式,必須是同步函式
     changeName: "changeName"
   }),
   ...mapActions({
     actionChangeAge: "actionChangeAge",//Action提交的是 mutation,而不是直接變更狀態,Action 可以包含任意非同步操作。
     actionChangeName: "actionChangeName"
   })
 }
};
複製程式碼

我的src是這樣的:

寫一個簡單的demo理解vuex

index.js

寫一個簡單的demo理解vuex

state.js

寫一個簡單的demo理解vuex

getter.js

寫一個簡單的demo理解vuex

mutation.js

寫一個簡單的demo理解vuex

action.js

寫一個簡單的demo理解vuex

原始碼地址:https://github.com/hgchenhao/-vuex

相關文章