首先要安装Vuex并在项目中引入哦
问:在Vue3项目里想用Vuex,第一步得干啥呀?
答:那肯定得先安装Vuex啦,如果你的项目是用Vue CLI创建的,那可以在命令行里通过 npm install vuex@next --save
或者 yarn add vuex@next
来安装Vuex的Vue3版本哦(这里的 @next
就是针对Vue3适配的啦),安装好之后呢,就在你的项目的入口文件(一般是 main.js
或者 main.ts
)里引入它并且创建一个Vuex的store实例呀。
比如说在 main.js
里,代码可能是这样的:
import { createApp } from 'vue'; import App from './App.vue'; import { createStore } from 'vuex'; // 创建一个新的store实例 const store = createStore({ state () { return { count: 0 }; }, mutations: { increment (state) { state.count++; } } }); const app = createApp(App); // 把store实例挂载到应用上 app.use(store); app.mount('#app');
这里就简单创建了一个有个 count
状态和一个 increment
突变的Vuex store啦,然后通过 app.use(store)
把它挂载到了Vue应用上哦。
在setup函数里怎么获取Vuex的状态呢?
问:我在Vue3的setup函数里面,咋拿到Vuex里存的那些数据呀?
答:在setup函数里获取Vuex的状态可以用 toRefs
和 storeToRefs
这俩好帮手哦。
先从Vuex里把store给导入进来呀,就像在组件里导入其他东西一样,假设我们上面创建的那个store在 store/index.js
文件里,那在组件里可以这么导入:
import { useStore } from 'vuex'; import { toRefs, reactive } from 'vue'; export default { setup () { const store = useStore(); // 通过storeToRefs把store里的状态转成响应式的ref对象 const { count } = toRefs(storeToRefs(store.state)); return { count }; } };
这里先用 useStore
获取到了Vuex的store实例,然后通过 storeToRefs
和 toRefs
的配合,就把 store.state
里的 count
状态转成了可以在setup函数里方便使用的响应式的 ref
对象啦,这样在模板里就可以直接用 {{ count }}
来显示这个状态的值咯,而且一旦这个状态在Vuex里变了,模板里显示的值也会跟着变呢。
那在setup函数里怎么调用Vuex的 mutations呢?
问:我想在setup函数里改变Vuex里的数据,咋调用那些mutations呀? 答:调用Vuex的mutations在setup函数里也不难哦,还是先把store导入进来,然后就可以直接通过store实例去调用mutations啦。
比如说还是上面那个有 increment
突变的store,在组件的setup函数里可以这样来调用这个突变去增加 count
的值:
import { useStore } from 'vuex'; export default { setup () { const store = useStore(); const incrementCount = () => { store.commit('increment'); }; return { incrementCount }; } };
这里定义了一个 incrementCount
函数,在这个函数里通过 store.commit('increment')
就调用了Vuex store里的 increment
突变,这样就能改变 store.state.count
的值啦,然后在模板里可以给个按钮绑定这个 incrementCount
函数,<button @click="incrementCount">增加计数</button>
,点击按钮就会触发这个突变改变数据咯。
在setup函数里使用Vuex的actions呢?
问:Vuex里还有actions呀,在setup函数里咋用它们呢? 答:没错,Vuex的actions也很有用呢,在setup函数里使用actions的步骤和调用mutations有点类似哦。
同样先导入store,然后就可以通过store实例去调用actions啦,假设我们在store里定义了一个这样的action:
actions: { async incrementAsync (context) { setTimeout(() => { context.commit('increment'); }, 1000); } }
这个action就是过一秒钟后再去调用 increment
突变来增加 count
的值,在组件的setup函数里可以这样调用这个action:
import { useStore } from 'vuex'; export default { setup () { const store = useStore(); const incrementCountAsync = () => { store.dispatch('incrementAsync'); }; return { incrementCountAsync }; } };
这里定义了 incrementCountAsync
函数,通过 store.dispatch('incrementAsync')
就调用了那个 incrementAsync
的action啦,然后在模板里也可以给个按钮绑定这个函数,<button @click="incrementCountAsync">异步增加计数</button>
,点击按钮就会触发这个action去执行相应的操作咯。
通过以上这些步骤,在Vue3的setup函数里就能很好地使用Vuex来管理应用的状态啦,是不是还挺方便的呀?
网友回答文明上网理性发言 已有0人参与
发表评论: