当前位置: 首页 > news >正文

在 `setup` 函数中使用 Vuex

在这里插入图片描述

🤍 前端开发工程师、技术日更博主、已过CET6
🍨 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1
🕠 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》、《前端求职突破计划》
🍚 蓝桥云课签约作者、上架课程《Vue.js 和 Egg.js 开发企业级健康管理项目》、《带你从入门到实战全面掌握 uni-app》

在Vue3中,结合Vuex 4(与Vue3配套的版本),可以在 setup 函数中通过 useStore 钩子来访问和操作Vuex store。

使用 useStore

import { useStore } from 'vuex';export default {
setup() {
const store = useStore();// 访问 state
const count = computed(() => store.state.count);// 提交 mutation
const increment = () => {
store.commit('increment');
};// 分发 action
const asyncIncrement = () => {
store.dispatch('asyncIncrement');
};return {
count,
increment,
asyncIncrement
};
}
};

示例

假设我们有一个Vuex store,包含一个 count state和一个 increment mutation:

// store.js
import { createStore } from 'vuex';export default createStore({
state: {
count: 0
},
mutations: {
increment(state) {
state.count++;
}
},
actions: {
asyncIncrement({ commit }) {
setTimeout(() => {
commit('increment');
}, 1000);
}
}
});

在组件中使用这个store:

<template>
<div>
<p>Count: {{ count }}</p>
<button @click="increment">Increment</button>
<button @click="asyncIncrement">Async Increment</button>
</div>
</template><script>
import { computed } from 'vue';
import { useStore } from 'vuex';export default {
setup() {
const store = useStore();const count = computed(() => store.state.count);
const increment = () => store.commit('increment');
const asyncIncrement = () => store.dispatch('asyncIncrement');return {
count,
increment,
asyncIncrement
};
}
};
</script>

注意事项

  • 确保在调用 useStore 之前已经安装并配置了Vuex。
  • 使用 computed 来响应式地访问store中的state。
  • 使用 mutations 来同步修改state,使用 actions 来处理异步逻辑。

使用模块化的 Vuex Store

如果你的store是模块化的,可以通过 store.state.moduleNamestore.commit('moduleName/mutationName') 的方式来访问和修改模块中的state和mutations。

总结

在Vue3中,通过 useStore 钩子可以很方便地在 setup 函数中访问和操作Vuex store。这种方式使得组件能够更加简洁地与全局状态进行交互,同时保持了响应式数据的更新。

http://www.lqws.cn/news/467893.html

相关文章:

  • 自定义 Spring starter 的原理详解
  • 港科ISM选课攻略整理
  • CVE-2024-6387漏洞、CVE-2025-26465漏洞、CVE-2025-26466漏洞 一口气全解决
  • 【nature review】原子尺度上光与物质的相互作用
  • Rabbitmq的五种消息类型介绍,以及集成springboot的使用
  • 小程序右上角○关闭事件
  • c++中 Lambda表达式
  • Ubuntu崩溃修复大赛的技术文章大纲
  • ssssssssss
  • Solidity内部合约创建全解析:解锁Web3开发新姿势
  • 5.3 VSCode使用FFmpeg库
  • CSS 制作学成在线网页
  • clickhouse-server连不上clickhouse-keeper的问题记录
  • 【appium】3.查看本地已安装的appium版本
  • WINUI/WPF——Button不同状态下图标切换
  • 对接支付宝,阿里云沙箱服务
  • 在Linux中如何编写*.service文件?
  • 【单调栈】-----【Largest Rectangle in a Histogram】
  • emscripten 编译 wasm 版本的 openssl
  • 蚂蚁百宝箱快速创建智能体AI小程序
  • 项目中后端如何处理异常?
  • 智慧水利数字孪生解决方案:百川孪生智领千行,100+标杆案例赋能智慧水利全域升级
  • 【LeetCode#第198题】打家劫舍(一维dp)
  • Compose笔记(二十七)--网格布局
  • SwinTransformer 改进:小波+注意力模块(Wavelet-Guided Attention)
  • 【LeetCode 热题 100】15. 三数之和——排序 + 双指针解法
  • WebeServer实现:学到了哪些东西
  • 缓存与加速技术实践-Kafka消息队列
  • Axios 在 Vue3 项目中的使用:从安装到组件中的使用
  • 【软考高级系统架构论文】论 SOA 在企业集成架构设计中的应用