4.2 组件中使用状态
4.2.1 使用state
test里面的状态
//test里面的状态 <h3>1.test模块state的状态</h3> <h5>{{userName}}</h5> <h5>{{userInfo}}</h5> <script setup> import { computed } from 'vue' import { useStore } from 'vuex' const store = useStore() /* ------------test模块状态-----------------*/ //获取test1模块的状态 const userName = computed(() => store.state.test.name) const userInfo = computed( () => store.state.test.name + '的职业是:' + store.state.test.profession ) </script> test1里面的状态 //test1里面的状态 <h3>1.test1模块state的状态</h3> <h5>{{sport}}</h5> <h5>公众号:{{publics}}</h5> //获取test2模块的状态 const publics = computed(() => store.state.test1.publics) const sport = computed( () => store.state.test1.name + '喜欢的运动:' + store.state.test1.sport )
4.2.2 使用getters
test模块getters的状态 <h3>2.test模块getters的状态</h3> <h5>{{getUserInfo}}</h5> <h5>{{getUserSex}}</h5> //获取getters const getUserInfo = computed(() => store.getters['test/getUserInfo']) const getUserSex = computed(() => store.getters['test/getUserSex']) test1模块getters的状态 <h3>2.test1模块getters的状态</h3> <h5>{{getSport}}</h5> <h5>{{getPublics}}</h5> //获取getters const getSport = computed(() => store.getters['test1/getSport']) const getPublics = computed(() => store.getters['test1/getPublics'])
4.2.3 使用mutations
用mutations改变test模块age的状态
3.用mutations改变test模块age的状态
<button @click="testClick">改变test状态(age)button>
<h5>{{age}}h5>
//通过mutations改变状态,改变test模块的age const age = computed(() => store.state.test.age) const testClick = () => { store.commit('test/testMutation1') } 用mutations改变test1模块amount的状态 <h3>3.用mutations改变test1模块amount的状态</h3> <button @click="test1Click">改变test1状态(amount)</button> <h5>{{amount}}</h5> //通过mutations改变状态,改变test1模块的amount const amount = computed(() => store.state.test1.amount) const test1Click = () => { store.commit('test1/test1Mutation1') }
4.2.4 使用actions
用actions改变test模块age的状态
4.用actions改变test模块age的状态
<button @click="changeActions">改变test状态(age)button>
<h5>{{age}}h5>
//通过actions改变状态,改变test模块的age const changeActions = () => { store.dispatch('test/testAction1') } 用actions改变test1模块amount的状态 <h3>4.用actions改变test1模块amount的状态</h3> <button @click="changeActions1">改变test状态(amount)</button> <h5>{{amount}}</h5> //通过actions改变状态,改变test模块的amount const changeActions1 = () => { store.dispatch('test1/test1Action1') }
完整的Demo示例
<template> <div> <h2>Vuex状态学习</h2> <div class="wrapper"> <div class="left-box"> <h3>1.test模块state的状态</h3> <h5>{{userName}}</h5> <h5>{{userInfo}}</h5> ---------------------------------------------------------- <h3>2.test模块getters的状态</h3> <h5>{{getUserInfo}}</h5> <h5>{{getUserSex}}</h5> ---------------------------------------------------------- <h3>3.用mutations改变test模块age的状态</h3> <button @click="testClick">改变test状态(age)</button> <h5>{{age}}</h5> ---------------------------------------------------------- <h3>4.用actions改变test模块age的状态</h3> <button @click="changeActions">改变test状态(age)</button> <h5>{{age}}</h5> </div> <div class="line"></div> <div class="right-box"> <h3>1.test1模块state的状态</h3> <h5>{{sport}}</h5> <h5>公众号:{{publics}}</h5> ---------------------------------------------------------- <h3>2.test1模块getters的状态</h3> <h5>{{getSport}}</h5> <h5>{{getPublics}}</h5> ---------------------------------------------------------- <h3>3.用mutations改变test1模块amount的状态</h3> <button @click="test1Click">改变test1状态(amount)</button> <h5>{{amount}}</h5> ---------------------------------------------------------- <h3>4.用actions改变test1模块amount的状态</h3> <button @click="changeActions1">改变test状态(amount)</button> <h5>{{amount}}</h5> </div> </div> </div> </template> <script setup> import { computed } from 'vue' import { useStore } from 'vuex' const store = useStore() /* ------------test模块状态-----------------*/ //获取test1模块的状态 const userName = computed(() => store.state.test.name) const userInfo = computed( () => store.state.test.name + '的职业是:' + store.state.test.profession ) //获取getters const getUserInfo = computed(() => store.getters['test/getUserInfo']) const getUserSex = computed(() => store.getters['test/getUserSex']) //通过mutations改变状态,改变test模块的age const age = computed(() => store.state.test.age) const testClick = () => { store.commit('test/testMutation1') } //通过actions改变状态,改变test模块的age const changeActions = () => { store.dispatch('test/testAction1') } /* -----------test1模块状态------------------*/ //获取test2模块的状态 const publics = computed(() => store.state.test1.publics) const sport = computed( () => store.state.test1.name + '喜欢的运动:' + store.state.test1.sport ) //获取getters const getSport = computed(() => store.getters['test1/getSport']) const getPublics = computed(() => store.getters['test1/getPublics']) //通过mutations改变状态,改变test1模块的amount const amount = computed(() => store.state.test1.amount) const test1Click = () => { store.commit('test1/test1Mutation1') } //通过actions改变状态,改变test模块的amount const changeActions1 = () => { store.dispatch('test1/test1Action1') } </script> <style scoped> h2 { text-align: center; } .wrapper { width:1200px; margin: 0 auto; } .left-box, .right-box { width:calc(50% - 4px); display: inline-block; text-align: center; background: #c4bebf; border-radius: 5px; } .line { height: 100%; width: 4px; display: inline-block; } </style>
5.插件
Vuex 的 store 接受 plugins 选项,这个选项暴露出每次 mutation 的钩子。Vuex 插件就是一个函数,它接收 store 作为唯一参数:
const myPlugin = (store) => { // 当 store 初始化后调用 store.subscribe((mutation, state) => { // 每次 mutation 之后调用 // mutation 的格式为 { type, payload } }) }
5.1 使用插件
const store = createStore({ plugins: [myPlugin] })
以上是vuex的使用和部分参数的解释,每天进步一点点,欢迎一起学习交流。我是叫我詹躲躲。