Rumah  >  Artikel  >  hujung hadapan web  >  Cara menggunakan Vuex untuk melaksanakan pengurusan negeri dalam projek Vue

Cara menggunakan Vuex untuk melaksanakan pengurusan negeri dalam projek Vue

王林
王林asal
2023-10-15 15:57:22650semak imbas

Cara menggunakan Vuex untuk melaksanakan pengurusan negeri dalam projek Vue

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.

  1. Pasang dan konfigurasikan Vuex:
    Mula-mula, kita perlu memasang Vuex. Dalam projek Vue anda, gunakan npm atau yarn untuk memasang Vuex:
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
  1. Tentukan keadaan dan perubahan:
    Dalam Vuex, keadaan dipanggil "stor" dan boleh dihantar sifat 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++
      }
   }
})
  1. 在组件中使用状态:
    一旦我们配置好了Vuex的状态和变更,我们就可以在组件中使用它们了。在组件中,可以通过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。

  1. 计算属性和getters:
    有时,我们需要从状态派生一些新的计算属性,例如对状态进行过滤或计算。在Vuex中,可以使用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>
  1. 异步操作和actions:
    有时候,我们需要在mutation中执行一些异步操作,例如发送请求或延迟更新状态。在Vuex中,可以使用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

    Menggunakan keadaan dalam komponen: 🎜Setelah kita mengkonfigurasi keadaan Vuex dan perubahan, kita boleh menggunakannya dalam komponen. Dalam komponen tersebut, anda boleh mengakses gedung Vuex melalui 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'). 🎜
      🎜Sifat dan pengira yang dikira:🎜Kadangkala, kita perlu memperoleh beberapa sifat pengiraan baharu daripada keadaan, seperti menapis atau mengira keadaan. Dalam Vuex, ini boleh dicapai menggunakan 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 ini. $store.getters untuk diakses. Contohnya, gunakan sifat terkira evenOrOdd dalam template komponen: 🎜rrreee
        🎜Operasi dan tindakan tak segerak: 🎜Kadangkala, kita perlu melakukan beberapa operasi tak segerak dalam mutasi, seperti sebagai Hantar permintaan atau tangguhkan pengemaskinian status. Dalam Vuex, anda boleh menggunakan actions 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 kaedah komponen: 🎜rrreee🎜Ringkasan: 🎜Dalam artikel ini, kami membincangkan cara menggunakan Vuex untuk melaksanakan pengurusan keadaan dalam projek Vue. Kami menunjukkan penggunaan Vuex melalui contoh memasang dan mengkonfigurasi Vuex, mentakrifkan keadaan dan perubahan, menggunakan keadaan dan perubahan serta menggunakan sifat dan tindakan yang dikira. Saya harap artikel ini telah memberikan sedikit bantuan untuk anda menggunakan Vuex dalam projek Vue anda. 🎜

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!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn