做网络课程的网站教育机构做网站的目的

张小明 2026/1/10 18:37:04
做网络课程的网站,教育机构做网站的目的,国内ui做的好的网站有哪些,阳朔到桂林北在 Vue 项目开发中#xff0c;当组件间需要共享状态、跨层级通信时#xff0c;单纯依靠props和emit会让代码变得杂乱且难以维护。Vuex 作为 Vue 官方的状态管理库#xff0c;通过集中式存储管理应用的所有组件的状态#xff0c;并以相应的规则保证状态以一种可预测的方式发…在 Vue 项目开发中当组件间需要共享状态、跨层级通信时单纯依靠props和emit会让代码变得杂乱且难以维护。Vuex 作为 Vue 官方的状态管理库通过集中式存储管理应用的所有组件的状态并以相应的规则保证状态以一种可预测的方式发生变化。本文将从 Vuex 的四大核心概念State、Mutation、Action、Getter入手层层拆解其设计理念、使用方式和最佳实践帮你彻底搞懂 Vuex 的核心逻辑。一、Vuex 核心架构先理清整体逻辑在拆解具体概念前先明确 Vuex 的核心设计原则单向数据流。Vuex 的状态流转遵循View视图→ Action动作→ Mutation变更→ State状态→ View视图。View 触发 Action可包含异步操作Action 提交 Mutation不能异步Mutation 修改 StateState 更新后驱动 View 重新渲染。这种设计让状态变更轨迹清晰可追溯避免了直接修改状态导致的不可预测问题。二、State唯一的状态数据源1. 核心作用State 是 Vuex 的 “数据仓库”存储应用的所有共享状态且唯一一个 Vuex 实例只能有一个 State。它相当于组件中的data但作用域是全局的所有组件都能访问。2. 基本使用1定义 State// store/index.js import Vue from vue import Vuex from vuex Vue.use(Vuex) export default new Vuex.Store({ // 定义共享状态 state: { count: 0, userInfo: { name: 张三, age: 25 }, todos: [ { id: 1, text: 学习Vuex, done: true }, { id: 2, text: 拆解核心概念, done: false } ] } })2组件中访问 State有两种常用方式方式 1直接通过$store访问template div p当前计数{{ $store.state.count }}/p p用户名{{ $store.state.userInfo.name }}/p /div /template方式 2通过mapState辅助函数映射推荐简化代码适用于需要访问多个 State 的场景将 State 映射为组件的计算属性template div p当前计数{{ count }}/p p用户名{{ userName }}/p p待办列表{{ todos }}/p /div /template script import { mapState } from vuex export default { computed: { // 方式1数组形式映射的计算属性名与State属性名一致 ...mapState([count, todos]), // 方式2对象形式自定义计算属性名 ...mapState({ userName: state state.userInfo.name, // 简化写法当函数体仅返回state属性时 userAge: userInfo.age }) } } /script3. 注意事项State 是响应式的修改 State 后依赖该状态的组件会自动更新不要直接修改 State必须通过 Mutation这是 Vuex 的核心规则保证状态变更可追踪。三、Mutation唯一能修改 State 的 “钥匙”1. 核心作用Mutation 是修改 Vuex 中 State 的唯一方式所有对 State 的同步修改都必须通过 Mutation 完成。每个 Mutation 都有一个字符串类型的type和一个handler实际修改状态的函数。2. 基本使用1定义 Mutation// store/index.js export default new Vuex.Store({ state: { count: 0 }, mutations: { // 定义修改count的mutation increment(state) { state.count }, // 带参数的mutation参数称为payload incrementByNum(state, num) { state.count num }, // payload为对象的情况推荐可传递多个参数 incrementWithObj(state, payload) { state.count payload.num state.userInfo.age payload.age } } })2提交 Mutation组件中通过commit提交 Mutation不能直接调用 mutation 函数template div p当前计数{{ count }}/p button clickadd加1/button button clickaddByNum加5/button button clickaddWithObj加3且年龄加1/button /div /template script import { mapState } from vuex export default { computed: { ...mapState([count]) }, methods: { add() { // 方式1直接提交type this.$store.commit(increment) }, addByNum() { // 方式2提交带payload的mutation this.$store.commit(incrementByNum, 5) }, addWithObj() { // 方式3以对象形式提交更清晰 this.$store.commit({ type: incrementWithObj, num: 3, age: 1 }) } } } /script3mapMutations辅助函数简化 mutation 提交将 mutation 映射为组件的 methodsscript import { mapState, mapMutations } from vuex export default { computed: { ...mapState([count]) }, methods: { // 映射mutation为方法 ...mapMutations([increment, incrementByNum]), // 自定义方法名 ...mapMutations({ add: increment, addNum: incrementByNum }), addWithObj() { this.$store.commit({ type: incrementWithObj, num: 3, age: 1 }) } } } /script3. 核心规则必须是同步函数如果在 mutation 中写异步代码如 setTimeoutVuex 无法追踪状态变更的准确时机调试工具也无法正确记录状态变化仅负责修改状态不要在 mutation 中做业务逻辑如请求数据、判断逻辑业务逻辑应放在 Action 中。四、Action处理异步的 “中间件”1. 核心作用Action 用于处理异步操作和复杂业务逻辑最终通过提交 Mutation 来修改 State不能直接修改 State。Action 支持异步操作如 AJAX 请求、定时器这是它与 Mutation 的核心区别。2. 基本使用1定义 Action// store/index.js export default new Vuex.Store({ state: { count: 0, userList: [] }, mutations: { increment(state) { state.count }, setUserList(state, list) { state.userList list } }, actions: { // 简单异步action带context参数包含store的所有方法/属性 incrementAsync(context) { setTimeout(() { // 提交mutation修改状态 context.commit(increment) }, 1000) }, // 解构context简化代码常用 incrementAsyncWithNum({ commit }, num) { setTimeout(() { commit(incrementByNum, num) }, 1000) }, // 异步请求数据的action async fetchUserList({ commit }) { try { const res await fetch(/api/userList) const data await res.json() commit(setUserList, data) } catch (err) { console.error(请求失败, err) } } } })2分发 Action组件中通过dispatch分发 Actiontemplate div p当前计数{{ count }}/p button clickaddAsync1秒后加1/button button clickaddAsyncByNum1秒后加5/button button clickgetUserList获取用户列表/button /div /template script import { mapState } from vuex export default { computed: { ...mapState([count, userList]) }, methods: { addAsync() { this.$store.dispatch(incrementAsync) }, addAsyncByNum() { // 分发带payload的action this.$store.dispatch(incrementAsyncWithNum, 5) }, getUserList() { this.$store.dispatch(fetchUserList) } } } /script3mapActions辅助函数将 Action 映射为组件的 methods简化分发操作script import { mapState, mapActions } from vuex export default { computed: { ...mapState([count, userList]) }, methods: { ...mapActions([incrementAsync, fetchUserList]), // 自定义方法名 ...mapActions({ addAsyncNum: incrementAsyncWithNum }), handleAdd() { this.addAsyncNum(5) } } } /script3. 核心特性支持异步可在 Action 中执行任意异步操作请求、定时器等可组合Action 之间可以互相调用处理复杂业务逻辑actions: { actionA({ dispatch }) { return new Promise(resolve { setTimeout(() { dispatch(actionB) resolve() }, 1000) }) }, actionB({ commit }) { commit(increment) } }五、Getter对 State 的 “计算属性”1. 核心作用Getter 相当于 Vuex 的 “计算属性”用于对 State 中的数据进行加工处理如过滤、排序、拼接返回新的结果。Getter 的返回值会根据其依赖的 State 自动缓存只有当依赖的 State 变化时才会重新计算。2. 基本使用1定义 Getter// store/index.js export default new Vuex.Store({ state: { todos: [ { id: 1, text: 学习Vuex, done: true }, { id: 2, text: 拆解核心概念, done: false }, { id: 3, text: 实战练习, done: false } ], count: 0 }, getters: { // 基础用法获取已完成的待办 doneTodos: state { return state.todos.filter(todo todo.done) }, // 获取已完成待办的数量依赖其他getter doneTodosCount: (state, getters) { return getters.doneTodos.length }, // 带参数的getter返回函数实现传参 getTodoById: state id { return state.todos.find(todo todo.id id) }, // 组合计算 doubleCount: state { return state.count * 2 } } })2访问 Getter方式 1通过$store.getters访问template div p已完成待办{{ $store.getters.doneTodos.length }} 条/p pID为1的待办{{ $store.getters.getTodoById(1).text }}/p p计数翻倍{{ $store.getters.doubleCount }}/p /div /template方式 2mapGetters辅助函数将 Getter 映射为组件的计算属性template div p已完成待办{{ doneTodosCount }} 条/p p计数翻倍{{ doubleCount }}/p /div /template script import { mapGetters } from vuex export default { computed: { // 数组形式映射 ...mapGetters([doneTodosCount, doubleCount]), // 自定义名称映射 ...mapGetters({ doneCount: doneTodosCount, double: doubleCount }), // 结合本地计算属性 todoText() { return this.$store.getters.getTodoById(2).text } } } /script3. 核心优势缓存性依赖不变时多次访问 Getter 不会重复计算复用性将通用的状态处理逻辑抽离到 Getter避免组件中重复写相同代码纯函数Getter 仅依赖 State 和其他 Getter不产生副作用保证结果可预测。六、核心概念对比与总结概念核心作用是否可异步是否能直接修改 State调用方式State存储共享状态--组件中通过$store.state访问Mutation同步修改 State否是唯一方式$store.commit(type)Action处理异步 / 业务逻辑提交 Mutation是否$store.dispatch(type)Getter加工 State 数据计算属性-否$store.getters.xxx最佳实践遵循单向数据流View → Action → Mutation → State → View简单同步修改直接提交 Mutation异步 / 复杂逻辑先写 Action再在 Action 中提交 Mutation状态加工使用 Getter 抽离通用逻辑避免组件重复代码辅助函数mapState/mapMutations/mapActions/mapGetters简化代码提升可读性模块化当项目复杂时使用 Vuex 的 Module 拆分状态后续可单独拆解。七、最后Vuex 的四大核心概念围绕 “可预测的状态管理” 设计理解它们的分工和协作逻辑就能轻松应对组件间的状态共享问题。记住State 存数据Mutation 改数据同步Action 处理异步 / 业务Getter 加工数据。从简单场景入手逐步尝试异步 Action、Getter 缓存、辅助函数等特性你会发现 Vuex 能让复杂应用的状态管理变得清晰、可控。
版权声明:本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!

做新浪微博网站需要中山市建网站公司

在Windows系统中,可以通过多种CMD命令来查看电脑的开机时间。以下是几种常用的方法:1. 使用 systeminfo 命令这是最常用且简单的方法。在命令提示符中执行此命令后,可以快速找到系统的启动时间。操作步骤:按下 Win R 键&#xff…

张小明 2026/1/3 18:40:28 网站建设

教新手做网站难吗商城开发网站

5分钟快速上手:从零构建企业级日志管理平台 【免费下载链接】graylog2-server Free and open log management 项目地址: https://gitcode.com/gh_mirrors/gr/graylog2-server 什么是Graylog日志管理系统? Graylog是一款功能强大的开源日志管理平…

张小明 2026/1/10 9:59:44 网站建设

傻瓜式php网站开发工具网站的百度地图怎么做的

第一章:揭秘Open-AutoGLM底层架构:如何实现零代码大模型微调与部署 Open-AutoGLM 是一个面向大语言模型(LLM)的自动化微调与部署框架,其核心目标是让开发者无需编写代码即可完成从数据准备到模型上线的全流程。该系统通…

张小明 2026/1/1 15:37:09 网站建设

东莞企业网站制作怎么做河北建设网站

Solaris 8 与 LDAP 命名服务配置指南 1. 允许匿名访问 VLV 控制 ACI 为了允许匿名用户访问,需要更改默认设置。通过 Directory Console 更改 VLV 控制 ACI 是最简单的方法,具体步骤如下: 1. 在左侧面板中,点击“config”,然后点击“features”,此时会显示 VLV Request…

张小明 2026/1/7 7:10:06 网站建设

广西建设监理协会网站广州必玩的景点推荐

Langchain-Chatchat能否处理图像中的文字内容?OCR整合方案设想 在企业知识管理日益智能化的今天,一个常见的痛点浮现出来:大量关键文档以扫描件、照片或截图的形式存在——合同、手写笔记、工程图纸、传真文件……这些图像中蕴藏着重要信息&…

张小明 2026/1/1 21:46:24 网站建设

唐山教育平台网站建设wordpress修改文章浏览次数

图解说明: 左图 (智能翻译):CatBoost 能自动把“北京”、“上海”这样的文字,转换成“买房概率”这样的数字,机器直接能读懂。右图 (对称树):CatBoost 的树结构非常整齐,同一层的问题必须一样(比…

张小明 2026/1/1 13:21:43 网站建设