前端數(shù)據(jù)流之vuex

從前整理過vuex,這篇是補充

最簡單的vuex



多個組件共享狀態(tài)時的vuex


初始化

vue create vuex-pro
mannulbabel 其余不裝
yarn serve啟動項目

vuex基本使用

yarn add vuex
從前整理的文章,還是這些操作

mapstate

Bar.foo

import { mapState } from 'vuex'

getter

store中的計算屬性

  • 基本用法
    準(zhǔn)備數(shù)據(jù)

    getter中的方法,找到剩余未作的事件數(shù)量
getters: {
    remaining: state => {
      return state.todos.filter(item => item.done === false).length
    }
  }

引入

import {  mapGetters } from 'vuex'

使用

  • getter返回函數(shù)
    getter中的方法

    mapGetters中也要改,剩下具體用法

mutations

  • 一種推薦的寫法



  • mutation要遵守vue的響應(yīng)規(guī)則
    需要在對象添加新屬性時
    Vue.set(obj, 'newProp', 123)
    或者
    state.obj = { ...state.obj, newProp: 123 }
  • 使用常量替代 Mutation 事件類型
    大型項目使用,人少了就不用
  • mapmutations
    可以使用mapmutations在組件中提交mutation,必須是同步的

action

可以包含異步操作

  • 基本使用

store.js

  actions: {
    increment( {commit}, {num = 1}) {
      setTimeout(() => {
        commit({
          type: 'increment',
          num
        })
      }, 1000);
    }
  }

視圖層

<button @click="asyncIncre">異步增加</button>

方法

    asyncIncre () {
      this.$store.dispatch('increment', {
        num: 2
      })
    }
  • 其余
    mapActions可以取別名
    可以結(jié)合Promise使用
    可以結(jié)合asyncawait使用
    可以調(diào)用異步api以及分發(fā)多重mutations

Module

store分割成不同的模塊。結(jié)合mobx里的store理解

即使寫在模塊里,action mutation getter也是全局的,除非加上namespaced: true,,調(diào)用的時候在視圖層{{ $store.getters['foo/abc'] }}即可

購物車案例

vuex插件

自定義
內(nèi)置logger
vuex-persistedstate -- 可以同步狀態(tài),刷新也不會丟失,類似于結(jié)合localStorage使用

嚴(yán)格模式

表單處理

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容