大白話Vuex 核心概念(state、mutations、actions)的使用案例與原理
Vuex是Vue.js應用程序中專門用來管理狀態的工具,就好像是一個大管家,幫你把項目里一些重要的數據和操作管理得井井有條。下面用大白話結合案例來介紹Vuex核心概念state、mutations、actions的使用案例與原理:
state
- 原理:state就像是一個倉庫,用來存放數據的。在Vuex里,它就是用來存儲整個應用程序中需要共享的數據的地方,比如用戶的登錄狀態、用戶名、購物車商品列表等。組件可以從這個倉庫里獲取數據來展示。
- 使用案例
// 創建一個Vuex實例
const store = new Vuex.Store({state: {// 存儲當前登錄用戶的姓名username: '張三' }
});// 在Vue組件中獲取state中的數據
export default {computed: {user() {// 通過this.$store.state來訪問state中的數據return this.$store.state.username; }}
};
mutations
- 原理:mutations就像是倉庫管理員,專門負責修改倉庫(state)里的數據。但是這個管理員很嚴格,只能通過它規定的方式來修改數據,這樣可以保證數據的修改是可控的、可追蹤的。而且mutations里的函數必須是同步的,不能是異步的,就像管理員一次只能做一件事,不能同時做好幾件事。
- 使用案例
const store = new Vuex.Store({state: {count: 0},mutations: {// 定義一個名為increment的mutation來增加count的值increment(state) { state.count++;}}
});// 在Vue組件中提交mutation
methods: {add() {// 通過this.$store.commit來提交mutationthis.$store.commit('increment'); }
}
actions
- 原理:actions可以理解為是倉庫的調度員,它不直接修改數據,但是可以指揮管理員(mutations)去修改數據。它的作用是處理一些異步操作,比如從服務器獲取數據,等數據拿到了再告訴管理員去修改倉庫里的數據。
- 使用案例
const store = new Vuex.Store({state: {userList: []},mutations: {// 定義一個名為setUserList的mutation來設置用戶列表setUserList(state, users) { state.userList = users;}},actions: {// 定義一個名為fetchUsers的action來獲取用戶列表async fetchUsers({ commit }) { // 假設這里是發送網絡請求獲取用戶數據const response = await axios.get('https://example.com/api/users'); // 拿到數據后,通過commit提交mutation來修改statecommit('setUserList', response.data); }}
});// 在Vue組件中調用action
methods: {async getUsers() {// 通過this.$store.dispatch來調用actionawait this.$store.dispatch('fetchUsers'); }
}
React的Diff算法和Vue的Diff算法有什么區別?