Vue技術点整理-Vuex
18162 ワード
Vuexとは?
いつVuexを使いましたか?
一、vue cliにおける簡単なVuexの使用例
1、stateの使い方
注意:main.jsはstoreを定義するコードであり、後でstateを受信するいくつかの方法である. main.js 取得状態個数が少ない場合に適合する 複数の状態に適合する場合 ローカル計算属性と混合して使用する場合
2、Getterの使い方
注意:Getterがステータスライブラリ内のデータに適用される場合は、一度フィルタリングする必要があるか、またはステータス値が他のステータスに依存して一定の計算を行う必要がある場合は、Getterメソッドを使用して計算して戻ることができます.定義getterコード:
受信getterコード:
3,Mutationの使い方
注意:Vuexのstoreの状態を変更する唯一の方法は、mutationをコミットして状態を直接変更することですが、Mutationは同期関数でなければなりません.呼び出しapiなどの非同期操作が必要な場合は、4 actionsを使用してください.定義Mutationコード 呼び出し受信Mutationコード
4、アクションの使い方
注意:Actionはmutationと似ていますが、次の点で異なります. Actionは、ステータスを直接変更するのではなく、mutationをコミットします. Actionは任意の非同期動作を含むことができ、promise、awaitなどの処理非同期呼び出し を用いることができる.定義Action actionコード を受信
5,Moduleの使い方
注意:適用が複雑な場合、ステータスが多く管理が困難な場合、Vuexではstoreをモジュールに分割できます. moduleモジュール を作成する使用モジュールの値をどのように受け取るかは、以下のように参照され、モジュール名を加えると になる.
1,Vuex Vue.js 。 ,
2, Vuex store( )。“store” , (state)
3, , ,
いつVuexを使いましたか?
1, , , , Vuex 。
2, , Vuex, store 。
一、vue cliにおける簡単なVuexの使用例
1、stateの使い方
注意:main.jsはstoreを定義するコードであり、後でstateを受信するいくつかの方法である.
import Vue from 'vue'
import Vuex from 'vuex'
import App from './App.vue'
import router from './router/'
Vue.use(Vuex)
const store = new Vuex.Store({
namespaced: false,
state: {
title: ' ',
backFlag: false
},
mutations: {
updateTitle (state, title) {
state.title = title
},
updateBackFlag (state, backFlag) {
state.backFlag = backFlag
}
}
})
Vue.config.productionTip = false
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app')
{{title}}
{{backFlag}}
<span style="color: #000000;">
export default {
name: </span><span style="color: #800000;">"</span><span style="color: #800000;"> </span><span style="color: #800000;">"</span><span style="color: #000000;">,
computed: {
title () {
return this.$store.state.title;
},
backFlag () {
return this.$store.state.backFlag;
}
}
}
</span>
{{title}}
{{backFlag}}
<span style="color: #000000;">
import { mapState } from </span>'vuex'<span style="color: #000000;">
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
name: </span>" "<span style="color: #000000;">,
computed: mapState({<br> //'title',//
title: state </span>=><span style="color: #000000;"> state.title,
backFlag: state </span>=><span style="color: #000000;"> state.backFlag
})
}
</span>
{{title}}
{{backFlag}}
<span style="color: #000000;">
import { mapState } from </span>'vuex'<span style="color: #000000;">
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
name: </span>" "<span style="color: #000000;">,
...mapState({
title: state </span>=><span style="color: #000000;"> state.title,
backFlag: state </span>=><span style="color: #000000;"> state.backFlag
})
}
</span>
2、Getterの使い方
注意:Getterがステータスライブラリ内のデータに適用される場合は、一度フィルタリングする必要があるか、またはステータス値が他のステータスに依存して一定の計算を行う必要がある場合は、Getterメソッドを使用して計算して戻ることができます.
const store = new Vuex.Store({
namespaced: false,
state: {
todos: [
{ id: 1, text: ' ', done: false },
{ id: 2, text: ' ', done: false },
{ id: 3, text: ' ', done: true }
]
},
mutations: {
updateTodos (state, todos) {
state.todos = todos
}
},
getters: {
// id , todos
getTodoById: (state) => (id) => {
return state.todos.find(todo => todo.id === id)
},
// todos done true
doneTodos: state => {
return state.todos.filter(todo => todo.done)
}
}
})
{{doneTodos}}
<span style="color: #000000;">
import { mapState,mapGetters } from </span>'vuex'<span style="color: #000000;">
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
name: </span>"test"<span style="color: #000000;">,
computed: {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> doneTodos, doneTodos</span>
<span style="color: #000000;"> ...mapGetters({
doneTodos: </span>'doneTodos'<span style="color: #000000;">
})
},
mounted:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> todos done true </span>
console.info(<span style="color: #0000ff;">this</span><span style="color: #000000;">.$store.getters.doneTodos)
</span><span style="color: #008000;">//</span><span style="color: #008000;"> todos done true </span>
console.info(<span style="color: #0000ff;">this</span>.$store.getters.getTodoById(2<span style="color: #000000;">))
}
};
</span>
3,Mutationの使い方
注意:Vuexのstoreの状態を変更する唯一の方法は、mutationをコミットして状態を直接変更することですが、Mutationは同期関数でなければなりません.呼び出しapiなどの非同期操作が必要な場合は、4 actionsを使用してください.
const store = new Vuex.Store({
namespaced: false,
state: {
title: ' ',
backFlag: false
},
mutations: {
updateTitle (state, title) {
state.title = title
},
updateBackFlag (state, backFlag) {
state.backFlag = backFlag
}
}
})
{{title}}
<span style="color: #000000;">
import { mapState,mapMutations } from </span>'vuex'<span style="color: #000000;">
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
name: </span>"test"<span style="color: #000000;">,
computed: {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #000000;"> ...mapState({
title: state </span>=><span style="color: #000000;"> state.title,
})
},
mounted:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #0000ff;">this</span>.$store.commit('updateTitle'," _ "<span style="color: #000000;">)
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #0000ff;">this</span>.updateTitle(' _ '<span style="color: #000000;">)
},
methods: {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> `this.add()` `this.$store.commit('navbar/updateTitle')`</span>
<span style="color: #000000;"> ...mapMutations({
updateTitle: </span>'updateTitle'<span style="color: #000000;">
})
}
};
</span>
4、アクションの使い方
注意:Actionはmutationと似ていますが、次の点で異なります.
import HttpService from '../../service/httpService.js';
const store = new Vuex.Store({
namespaced: false,
state: {
title: ' ',
backFlag: false
},
mutations: {
updateTitle (state, title) {
state.title = title
},
updateBackFlag (state, backFlag) {
state.backFlag = backFlag
}
},
actions: {
updateTitleAsync (context,obj) {
return new Promise((resolve, reject) => {
let channelId = '001'
HttpService.queryGoods(channelId)
.then(data => {
context.commit('updateTitle',obj.title)
resolve()
})
.catch(error => {
console.info(error);
});
})
}
}
})
{{title}}
<span style="color: #000000;">
import { mapState,mapMutations,mapActions } from </span>'vuex'<span style="color: #000000;">
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
name: </span>"test"<span style="color: #000000;">,
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #000000;"> ...mapState({
title: state </span>=><span style="color: #000000;"> state.title,
})
},
mounted:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> this.updateTitleAsync(" , ")</span>
<span style="color: #0000ff;">this</span><span style="color: #000000;">.updateTitleAsync({
title: </span>" , "<span style="color: #000000;">
}).then(() </span>=><span style="color: #000000;"> {<br> //console.info(context.backFlag)
console.info(</span><span style="color: #0000ff;">this</span><span style="color: #000000;">.$store.state.title)
})
},
methods: {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> `this.updateTitleAsync()` </span>
`<span style="color: #0000ff;">this</span>.$store.dispatch('increment'<span style="color: #000000;">)`
...mapActions({
updateTitleAsync: </span>'updateTitleAsync'<span style="color: #000000;">
})
}
};
</span>
5,Moduleの使い方
注意:適用が複雑な場合、ステータスが多く管理が困難な場合、Vuexではstoreをモジュールに分割できます.
const store new Vuex.Store({
modules: {
//navbar :
navbar: {
namespaced: true,
state: {
title: ' ',
backFlag: false
},
mutations: {
updateTitle (state, title) {
state.title = title
},
updateBackFlag (state, backFlag) {
state.backFlag = backFlag
}
}
}
}
})
{{title}}
<span style="color: #000000;">
import { mapState,mapMutations } from </span>'vuex'<span style="color: #000000;">
export </span><span style="color: #0000ff;">default</span><span style="color: #000000;"> {
name: </span>"test"<span style="color: #000000;">,
computed: {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #000000;"> ...mapState({
title: state </span>=><span style="color: #000000;"> state.<span style="color: #ff0000;">navbar</span>.title,
})
},
mounted:</span><span style="color: #0000ff;">function</span><span style="color: #000000;">() {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #0000ff;">this</span>.$store.commit('<span style="color: #ff0000;">navbar</span>/updateTitle'," _ "<span style="color: #000000;">)
</span><span style="color: #008000;">//</span><span style="color: #008000;"> title </span>
<span style="color: #0000ff;">this</span>.updateTitle(' _ '<span style="color: #000000;">)
},
methods: {
</span><span style="color: #008000;">//</span><span style="color: #008000;"> `this.add()` `this.$store.commit('<span style="color: #ff0000;">navbar</span>/updateTitle')`</span>
<span style="color: #000000;"> ...mapMutations({
updateTitle: </span>'<span style="color: #ff0000;">navbar</span>/updateTitle'<span style="color: #000000;">
})
}
};
</span>
GitHub vue-ht-cli