Cette fois, je vais vous montrer comment utiliser la gestion d'état Vuex et quelles sont les précautions lors de l'utilisation de la gestion d'état Vuex. Ce qui suit est un cas pratique, jetons un coup d'œil.
Vuex est un outil conçu pour Vue.js Modèles de gestion d’état pour le développement d’applications. Il utilise un stockage centralisé pour gérer l'état de tous les composants de l'application et utilise les règles correspondantes pour garantir que l'état change de manière prévisible. Vuex est également intégré à L'extension officielle devtools de l'outil de débogage de Vue fournit des fonctions de débogage avancées telles que le débogage de voyage dans le temps sans configuration, l'importation et l'exportation d'instantanés d'état, etc.
Ce qui précède est l'introduction de vuex dans le document officiel de vuex. Le document officiel explique en détail l'utilisation de vuex. Je n'entrerai pas ici dans les détails de l'utilisation de vuex. Le but de la rédaction de ce blog est simplement d'aider certains étudiants à comprendre et à démarrer plus rapidement avec vuex.
1. Installez
$ npm install vuex --save
2. Référence store.js
import Vue from 'vue' import App from './App' import router from './router' import store from './vuex/store' //引用store.js Vue.config.productionTip = false //阻止在启动时生成生产提示 //vue实例 new Vue({ el: '#app', router, store, //把store挂在到vue的实例下面 template: '<app></app>', components: { App } })
dans l'entrée principale main.js js 3. Référencez Vuex
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) //注册Vuex // 定义常量 如果访问他的话,就叫访问状态对象 const state = { count: 1 } // mutations用来改变store状态, 如果访问他的话,就叫访问触发状态 const mutations = { //这里面的方法是用 this.$store.commit('jia') 来触发 jia(state){ state.count ++ }, jian(state){ state.count -- }, } //暴露到外面,让其他地方的引用 export default new Vuex.Store({ state, mutations })
dans store.js 4. Utilisez
dans le composant vue Utilisez la zone $store.commit('jia') pour déclencher les méthodes d'addition et de soustraction sous les mutations
<template> <p> </p> <h1>Hello Vuex</h1> <h5>{{$store.state.count}}</h5> <p> <button>+</button> <button>-</button> </p> </template> <!-- 加上scoped是css只在这个组件里面生效,为了不影响全局样式 --> <style> h5{ font-size: 20px; color: red; } </style>
5. Voir la démo
6. l'état accède à l'objet d'état
Utiliser calculé pour calculer
<template> <p> </p> <h1>Hello Vuex</h1> <h5>{{count}}</h5> <p> <button>+</button> <button>-</button> </p> </template> <script> import {mapState} from 'vuex' export default{ name:'hello', //写上name的作用是,如果你页面报错了,他会提示你是那个页面报的错,很实用 // 方法一 // computed: { // count(){ // return this.$store.state.count + 6 // } // } // 方法二 需要引入外部 mapState computed:mapState({ count:state => state.count + 10 }) // ECMA5用法 // computed:mapState({ // count:function(state){ // return state.count // } // }) //方法三 // computed: mapState([ // 'count' // ]) } </script>
7. État de déclenchement des mutations (état de synchronisation)
<template> <p> </p> <h1>Hello Vuex</h1> <h5>{{count}}</h5> <p> <button>+</button> <button>-</button> </p> </template> <script> import {mapState,mapMutations} from 'vuex' export default{ name:'hello', //写上name的作用是,如果你页面报错了,他会提示你是那个页面报的错,很实用 //方法三 computed: mapState([ 'count' ]), methods:{ ...mapMutations([ 'jia', 'jian' ]) } } </script>
8. Les getters calculent l'attribut
Les getters ne peuvent pas utiliser les fonctions fléchées, ce qui modifiera le pointage de ceci
Ajouter des getters
// 计算 const getters = { count(state){ return state.count + 66 } } export default new Vuex.Store({ state, mutations, getters }) //count的参数就是上面定义的state对象 //getters中定义的方法名称和组件中使用的时候一定是一致的,定义的是count方法,使用的时候也用count,保持一致。 组件中使用 <script> import {mapState,mapMutations,mapGetters} from 'vuex' export default{ name:'hello', computed: { ...mapState([ 'count' ]), ...mapGetters([ 'count' ]) }, methods:{ ...mapMutations([ 'jia', 'jian' ]) } } </script>
dans store.js 9. actionss (état asynchrone)
Ajouter des actions
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) // 定义常量 const state = { count: 1 } // mutations用来改变store状态 同步状态 const mutations = { jia(state){ state.count ++ }, jian(state){ state.count -- }, } // 计算属性 const getters = { count(state){ return state.count + 66 } } // 异步状态 const actions = { jiaplus(context){ context.commit('jia') //调用mutations下面的方法 setTimeout(()=>{ context.commit('jian') },2000) alert('我先被执行了,然后两秒后调用jian的方法') }, jianplus(context){ context.commit('jian') } } export default new Vuex.Store({ state, mutations, getters, actions })
dans store.js Utiliser
<template> <p> </p> <h1>Hello Vuex</h1> <h5>{{count}}</h5> <p> <button>+</button> <button>-</button> </p> <p> <button>+plus</button> <button>-plus</button> </p> </template> <script> import {mapState,mapMutations,mapGetters,mapActions} from 'vuex' export default{ name:'hello', computed: { ...mapState([ 'count' ]), ...mapGetters([ 'count' ]) }, methods:{ // 这里是数组的方式触发方法 ...mapMutations([ 'jia', 'jian' ]), // 换一中方式触发方法 用对象的方式 ...mapActions({ jiaplus: 'jiaplus', jianplus: 'jianplus' }) } } </script> <style> h5{ font-size: 20px; color: red; } </style>
dans les composants 10. module modules
Adapté aux très gros projets avec de nombreux statuts, facile à gérer
Modifier store.js
import Vue from 'vue' import Vuex from 'vuex' Vue.use(Vuex) const state = { count: 1 } const mutations = { jia(state){ state.count ++ }, jian(state){ state.count -- }, } const getters = { count(state){ return state.count + 66 } } const actions = { jiaplus(context){ context.commit('jia') //调用mutations下面的方法 setTimeout(()=>{ context.commit('jian') },2000) alert('我先被执行了,然后两秒后调用jian的方法') }, jianplus(context){ context.commit('jian') } } //module使用模块组的方式 moduleA const moduleA = { state, mutations, getters, actions } // 模块B moduleB const moduleB = { state: { count:108 } } export default new Vuex.Store({ modules: { a: moduleA, b: moduleB, } })
Je pense que vous maîtrisez la méthode après avoir lu le cas dans cet article. Pour des informations plus intéressantes, veuillez prêter attention aux autres articles connexes sur le site Web chinois de php !
Lecture recommandée :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!