注解:vuex是一個很簡單、很方便的技術,入門很簡單,這里給大家詳細介紹下vuex的進階使用。
一、vuex模塊化modules
1、項目根目錄新建一個sotre文件夾,在store文件夾內,新建兩個文件(一個文件,一個文件夾),一個index.js文件,一個modules文件夾。
目錄結構:
store
index.js --文件
modules --文件夾
2、store->index.js
import Vue from 'vue' import Vuex from 'vuex' import modules from './modules' Vue.use(Vuex) export default new Vuex.Store({ state: { }, mutations: { }, actions: { }, modules:modules. //注意哦,后一個modules文件夾中有index.js文件,所以可以直接寫文件夾名,前端中文件夾中有index.js 可以只寫文件夾名(默認引入文件夾中的index.js) })
3、store->modules
目錄結構
store
index.js
modules
index.js //將所有模塊引入一個js文件,統一導出,store->index.js中就只需要引入modules,類似modules->index.js
cart.js //購物車模塊
login.js //登陸模塊
4、具體模塊寫法,cart.js
//cart.js const state={ cart:"one-sotre" } const actions={ cart({commit},data){ commit("cart",data) } }; const mutations={ cart(state,data){ state.cart=data; } } export default { state, actions, mutations }
5、將store->modules->[cart.js,login.js]導入store->modules->index.js中,統一處理導出
//store->modules->index.js import login from './login'; import cart from './cart'; export default{ login, //鍵值相同時,login:login==login cart }
6、在store->index.js中使用導出[login,cart]模塊
import Vue from 'vue' import Vuex from 'vuex' import modules from './modules'. //簡寫,引入modules/index.js Vue.use(Vuex) export default new Vuex.Store({ state: { }, mutations: { }, actions: { }, modules:modules })
在main.js中引入即可。
7、vue components組件中使用
//使用vuex中的函數mapState、mapAction,需要注意mapState、mapGetter這兩個需要數據實時更新的書寫在computed計算屬性中,mapAction等方法寫在methods方法中。
//.vue,這里只講兩個方法,mapState和mapAction,mapState和[mapGetters,mapMutions,mapActions]寫法可以簡單分為兩種,所以介紹兩種寫法. <script> import { mapState, mapActions } from 'vuex' export default{ mounted(){ this.login("true"); //調用mapActions['login']; console.log(this.login) //調用..mapState({login:state=>state.login.login}) }, methods:{
// 在uniapp中寫法,可以直接映射模塊中的login ...mapActions(['login']). //這里引入的是store->modules->login.js中的vuex Actions方法,...mapActions['login']==this.$store.dispatch("login"),mapMutions,mapActions寫在methods中.
//在vue中寫法,需要加上模塊名稱,如modules中的login中的login方法,寫法如下
...mapActions({'login':'login/login'}). //指store.dispatch('login/login');
}, computed{ ...mapState({login:state=>state.login.login}) //這里引入的是store->modules->login.js中的state數據,...mapState({login:state=>state.login.login})==this.state.login.login;mapState,mapGetters寫在computed中,跟computed自身屬性有關. } } </script>
//這個文檔聚集了modules 模塊化寫法,vuex基礎用法,mapState、mapGetters輔助函數的使用。