Cara menggunakan Vuex untuk melaksanakan pengurusan negeri dalam projek Vue
Pengenalan:
Dalam pembangunan Vue.js, pengurusan negeri ialah topik penting. Apabila kerumitan aplikasi meningkat, menghantar dan berkongsi data antara komponen menjadi rumit dan sukar. Vuex ialah perpustakaan pengurusan negeri rasmi Vue.js, menyediakan pembangun dengan penyelesaian pengurusan negeri berpusat. Dalam artikel ini, kita akan membincangkan penggunaan Vuex, bersama-sama dengan contoh kod tertentu.
npm install vuex
Kemudian, buat fail bernama store.js dalam projek Vue anda untuk mengkonfigurasi Vuex. Dalam fail ini, perkenalkan Vue dan Vuex, dan buat contoh kedai baharu:
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const store = new Vuex.Store({ // 在这里配置你的状态和相关的mutations,getters,actions等 }) export default store
state
kepada mengisytiharkan. Sebagai contoh, kita boleh menambah keadaan bernama count
pada fail store.js: state
属性来声明。例如,我们可以在store.js文件中添加一个名为count
的状态:const store = new Vuex.Store({ state: { count: 0 } })
我们还需要定义在状态变更时会触发的函数,这些函数被称为“mutations”。在mutations中,我们可以修改状态。例如,我们可以添加一个名为increment
的mutations来增加count的值:
const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } } })
this.$store
来访问Vuex的store。例如,在一个组件的template
中使用count状态:<template> <div> <p>Count: {{ this.$store.state.count }}</p> <button @click="increment">Increment</button> </div> </template> <script> export default { methods: { increment () { this.$store.commit('increment') } } } </script>
在上面的代码中,我们通过this.$store.state.count
来获取count状态的值,并通过this.$store.commit('increment')
来触发increment的mutation。
getters
来实现。在store.js中,我们可以添加一个名为evenOrOdd
的getter来判断count的值是奇数还是偶数:const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, getters: { evenOrOdd: state => state.count % 2 === 0 ? 'even' : 'odd' } })
然后在组件中使用getter,可以通过this.$store.getters
来访问。例如,在组件的template
中使用evenOrOdd计算属性:
<template> <div> <p>Count: {{ this.$store.state.count }}</p> <p>Count is {{ this.$store.getters.evenOrOdd }}</p> <button @click="increment">Increment</button> </div> </template> <script> export default { methods: { increment () { this.$store.commit('increment') } } } </script>
actions
来实现。在store.js中,我们可以添加一个名为incrementAsync
的action来实现异步增加count的操作:const store = new Vuex.Store({ state: { count: 0 }, mutations: { increment (state) { state.count++ } }, actions: { incrementAsync ({ commit }) { setTimeout(() => { commit('increment') }, 1000) } } })
然后在组件中触发action,可以通过this.$store.dispatch
来访问。例如,在组件的methods
export default { methods: { increment () { this.$store.dispatch('incrementAsync') } } }
Kita juga perlu menentukan fungsi yang akan dicetuskan apabila keadaan berubah Fungsi ini dipanggil "mutasi". . Dalam mutasi, kita boleh mengubah suai keadaan. Sebagai contoh, kita boleh menambah mutasi yang dipanggil increment
untuk meningkatkan nilai kiraan:
rrreee
this.$store
. Contohnya, menggunakan keadaan kiraan dalam template
komponen: 🎜🎜rrreee🎜Dalam kod di atas, kita mendapat keadaan kiraan melalui nilai this.$store.state.count
, dan mencetuskan mutasi kenaikan melalui this.$store.commit('increment')
. 🎜getters
. Dalam store.js, kita boleh menambah pengambil bernama evenOrOdd
untuk menentukan sama ada nilai kiraan adalah ganjil atau genap: 🎜🎜rrreee🎜 Kemudian gunakan pengambil dalam komponen, yang boleh dihantar template
komponen: 🎜rrreeeactions
untuk mencapai matlamat ini. Dalam store.js, kita boleh menambah tindakan bernama incrementAsync
untuk melaksanakan operasi meningkatkan kiraan secara tak segerak: 🎜🎜rrreee🎜 Kemudian cetuskan tindakan dalam komponen, yang boleh dilakukan melalui ini .$store .dispatch
untuk mengakses. Contohnya, cetuskan tindakan incrementAsync dalam Atas ialah kandungan terperinci Cara menggunakan Vuex untuk melaksanakan pengurusan negeri dalam projek Vue. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!