前面提到了Event Bus可以做到全域的事件监听管理,但当系统逐渐扩张,这些状态也越来越繁杂,这时後即可透过vuex(store
,可视为一个容器),对网站中所有全域状态状态进行集中管理
,且为响应式
。
官方示意图
定义行为,并透过commit触发Mutation,负责处理非同步
行为(与後端沟通,如Call API)。
接收来自Action的呼叫,依据计算逻辑对State进行操作,只有Mutations能对State进行操作、修改。
负责同步
行为(改变状态)。
集中管理应用程序的所有状态。
store的计算属性,返回值依据其依赖预先缓存(cache),依赖值改变时,重新计算。
当系统扩大,即使透过store进行集中管理也可能变得复杂、拥肿,vuex提供了切割
的功能,将store切割成客制的模组,各自维护自己的state、mutation、action、getter
Action -> commit -> Mutations -> 改变State -> 响应式渲染
// npm
$npm install vuex --save
// yarn
yarn add vuex
新增store.js
import Vue from 'vue'
import Vuex from 'vuex'
Vue.use(Vuex)
export default new Vuex.Store({
state: {
// 状态管理
},
mutations: {
// 业务逻辑
},
actions: {
// 用来指定mutations
},
getters: {
// vuex 中的计算属性
},
modules: {
// 模组
}
})
於main.js 引入store
import store from './store'
new Vue({
render: h => h(App),
store
}).$mount('#app')
const moduleCustomer = {
state: {},
mutations: {},
actions: {},
getters: {}
}
const moduleShop = {
state: {},
mutations: {},
actions: {}
}
export default new Vuex.Store({
modules: {
customer: moduleCustomer,
shop: moduleShop
}
})
使用切割後的store
store.state.customer // moduleCustomer 的状态
store.state.shop // moduleShop 的状态
剩下留给明天吧
有错误请不吝指教!
参考资料
https://vuejs.org/v2/guide
https://medium.com/itsems-frontend/vue-vuex1-state-mutations-364163b3acac
https://ithelp.ithome.com.tw/articles/10185686
https://ithelp.ithome.com.tw/articles/10237349
https://medium.com/itsems-frontend/vue-vuex4-modules-ddb3eec6b834
感谢各路大神
<<: [Day14] - Virtual DOM (一) - diff 演算法
>>: Day3 NodeJS-Module、Exports与Require
Python GUI中如果只有一个主视窗那将会很不好用,那该如何快速设计出不同的子视窗呢? 网路上有...
巢状路由 在原先的router-view中再放一个router-view。 接续前一个案例,User...
前言 前阵子看了bilibili上的一些技术相关影片,码牛学院的公开课程 Android动态加载技术...
後端连线资讯设定好,且CUBE也设定好後,就可以继续处理前端的连线。 首先需要在前端安装两个套件 #...
LED 显示温湿度 ( DHT11 ) 教学原文参考:LED 显示温湿度 ( DHT11 ) 这篇文...