搭建Vue項目環(huán)境
在使用Vue進行組件通信時,一般情況下我們會通過傳遞數(shù)據(jù)或者組件的狀態(tài)來實現(xiàn)。然而,隨著需要管理的狀態(tài)越來越多,代碼會變得龐大而混亂。為了解決這個問題,Vue引入了Vuex,將公用的狀態(tài)抽離出來放在一
在使用Vue進行組件通信時,一般情況下我們會通過傳遞數(shù)據(jù)或者組件的狀態(tài)來實現(xiàn)。然而,隨著需要管理的狀態(tài)越來越多,代碼會變得龐大而混亂。為了解決這個問題,Vue引入了Vuex,將公用的狀態(tài)抽離出來放在一個容器中,并通過一定的規(guī)則進行管理。
首先,在Git命令行中執(zhí)行以下命令來搭建項目環(huán)境:
npm install --global vue-cli
vue init webpack vue-demo
cd vue-demo
npm install
npm run dev
接下來,刪除默認的組件,并將整理如下:
Vuex的安裝和配置
完成基本環(huán)境搭建后,開始安裝Vuex。
npm install vuex --save-dev
在main.js中引入Vuex并注冊store:
import Vue from 'vue'
import Vuex from 'vuex'
import store from './vuex/store'
(Vuex)
new Vue({
el: '#app',
store,
template: ' ',
components: { App }
})
在src目錄下創(chuàng)建vuex目錄,并在該目錄下創(chuàng)建store.js,用于存放所有的狀態(tài)。
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
(Vuex)
const store new ({
state: {
userName: 'John'
}
})
export default store
將狀態(tài)渲染到組件中
在components目錄下創(chuàng)建組件,通過計算屬性獲取store中保存的狀態(tài)值并渲染到組件中:
lt;templategt;
lt;divgt;
lt;h1gt;{{ userName }}lt;/h1gt;
lt;/divgt;
lt;/templategt;
lt;scriptgt;
export default {
computed: {
userName() {
return this.$
}
}
}
lt;/scriptgt;
在中引入組件:
lt;templategt;
lt;div id"app"gt;
lt;Main /gt;
lt;/divgt;
lt;/templategt;
lt;scriptgt;
import Main from ''
export default {
components: {
Main
}
}
lt;/scriptgt;
現(xiàn)在,頁面上可以讀取到store容器中state的userName的值。如果修改了userName的值,頁面上也會相應地發(fā)生變化。
通過交互改變狀態(tài)
我們可以通過一些交互操作來改變狀態(tài),觀察組件是否能接收到狀態(tài)的變化。
在components目錄下創(chuàng)建組件:
lt;templategt;
lt;divgt;
lt;button @click"changeUserName"gt;Change Usernamelt;/buttongt;
lt;/divgt;
lt;/templategt;
lt;scriptgt;
export default {
methods: {
changeUserName() {
this.$ 'Jane'
}
}
}
lt;/scriptgt;
當點擊按鈕時,改變store中userName的值,Main組件中的userName值也會相應地更新。這種方式非常直觀易懂。
Vuex推薦的狀態(tài)改變方法
Vuex提供了一種更優(yōu)雅的方式來改變狀態(tài),即使用mutations。
在store.js中創(chuàng)建mutations對象,用于存放被修改的狀態(tài):
// store.js
import Vue from 'vue'
import Vuex from 'vuex'
(Vuex)
const store new ({
state: {
userName: 'John'
},
mutations: {
showUserName(state, msg) {
msg
}
}
})
export default store
其中,showUserName是一個mutation函數(shù),第一個參數(shù)state即為$,第二個參數(shù)msg需要從外部傳入。通過中的點擊事件來傳遞msg:
lt;templategt;
lt;divgt;
lt;button @click"changeUserName"gt;Change Usernamelt;/buttongt;
lt;/divgt;
lt;/templategt;
lt;scriptgt;
export default {
data() {
return {
msg: 'Jane'
}
},
methods: {
changeUserName() {
this.$('showUserName', )
}
}
}
lt;/scriptgt;
這樣,通過$將的值提交給showUserName,狀態(tài)就會相應地改變。這就是Vuex的最基本用法和作用。
總結
通過以上的步驟,我們成功搭建了基于vue-cli和webpack的Vue2.0項目,并使用Vuex進行組件通信。通過Vuex,我們可以更好地管理和改變組件間的狀態(tài),使代碼更加清晰和可維護。