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

山东省建设厅招标网站首页安徽省美好乡村建设网站

山东省建设厅招标网站首页,安徽省美好乡村建设网站,学网站建设前途,seo网站建设接单目录 Vuex 简介核心概念与工作流程核心 API 详解模块化开发 (modules)插件(Plugins)与扩展高级技巧与最佳实践 Vuex 简介 Vuex 是 Vue.js 的官方状态管理库,专为复杂应用设计,用于集中管理所有组件的共享状…

目录

  • Vuex 简介
  • 核心概念与工作流程
  • 核心 API 详解
  • 模块化开发 (modules)
  • 插件(Plugins)与扩展
  • 高级技巧与最佳实践

Vuex 简介

Vuex 是 Vue.js 的官方状态管理库,专为复杂应用设计,用于集中管理所有组件的共享状态。它通过严格的规则确保状态变更的可预测性,并与 Vue 的响应式系统深度集成。

为什么需要 Vuex?

  • 跨组件状态共享: 避免通过层层传递 props 或事件管理数据。
  • 状态变更追踪: 通过 DevTools 实现时间旅行调试
  • 异步操作管理: 统一处理 API 请求等异步任务

核心概念与工作流程

1.核心概念

概念描述特点场景
State存储应用状态(唯一数据源)响应式,不可直接修改用户登录信息、全局状态数据
Getters从 State 派生的计算属性(类似组件 computed)可缓存,依赖 State 变化过滤后的列表
Mutation同步修改 State 的方法(需要通过 commit 触发)必须是同步函数更新用户信息
Action处理异步操作,最终通过提交 Mutations 修改 State (通过 dispatch 触发)可包含任意异步操作调用 API 获取数据后更新
Modules将 store 分割为模块,每个模块拥有独立的 state、getters、mutations、actions解决单一状态树臃肿问题用户模块、商品模块

数据流示意图

组件 ->  dispatch -> actions -> commit -> mutations -> modify state -> 响应式更新视图

核心 API 详解

1、创建 Store

// store/index.js
import Vue from 'vue';
import Vuex from 'vuex';Vue.use(Vuex);export default new Vuex.store({state:{ count: 0},getters: {doubleCount: state => state.count * 2},mutations: {increment(state, payload){state.count += payload.amount;}},actions: {asyncIncrement({ commit }, payload){setTimeout(()=>{commit('increment', payload)}, 1000);}}	
})

2、组件中访问 State 和 Getters

直接访问

this.$store.state.count;       // 访问 state
this.$store.getters.doubleCount;   // 访问 getter

辅助函数(推荐)

import { mapState, mapGetters } from 'vuex';export default {computed: {// 映射 this.count 为 this.$store.state.count...mapState(['count']),// 重命名或嵌套映射...mapState({customCount: state => state.count,user: state => state.user.profile}),// 映射 Getters...mapGetters(['doubleCount'])}
}

3、触发 Mutations 和 Actions
直接调用

// 提交 Mutation
this.$store.commit('increment', { amount: 18});// 分发 Action
this.$store.dispatch('asyncIncrement', { amount: 15})

辅助函数

import { mapMutations, mapActions } from 'vuex';export default {methods: {// 映射 this.increment() 为 this.$store.commit('increment')...mapMutations(['increment']),// 映射 Action...mapAction(['asyncIncrement']),// 重命名...mapAction({add: 'asyncIncrement'})}
}

4、高级 API

// 监听所有 Mutations 的执行,适用于日志记录或状态持久化
store.subscribeconst unsubscribe = store.subscribe((mutation, state) => {console.log(`Mutation 类型: ${mutation.type}`);console.log('Mutation 载荷:', mutation.payload);console.log('当前 State:', state);
})// 取消监听
unsubscribe()
// 监听 Action 的执行,适用于异步任务监控
store.subscribeActionconst unsubscribeAction = store.subscribeAction({before: (action, state) => { // Action 执行前 }after: (action, state) => { // Action 执行后 }
})
// 替换整个 State 树,常用于状态重置
store.replaceStatestore.replaceState({ count: 100})

模块化开发 (modules)

1、模块化定义

// store/modules/user.js
export default {namespaced: true, // 启用命名空间state:() => ({ name: 'Guest'}),mutations:{setName(state, name){state.name = name;}},actions: {asyncFetchUser({ commit }){// 异步获取用户数据}}
}

2、注册模块

// store/index.js
import user from './modules/user';export default new Vuex.Store({modules: { user }
})

3、访问模块内容

// 访问模块 State
this.$store.state.user.name;// 辅助函数映射
...mapState('user',['name']),
...mapAction('user',['asyncFetchUser'])// 动态绑定模块名
...mapState({userName: (state) => state[this.moduleName].name
})

4、动态模块注册

// 注册模块
store.registerModule('dynamicModule', { // 模块配置 })// 卸载模块
store.unregisterModule('dynamicModule')

插件(Plugins)与扩展

1、内置插件 createLogger

import { createLogger } from 'vuex';const store = new Vuex.Store({plugins: [createLogger()],  // 开发环境使用
})

2、自定义插件示例(状态持久化)

const persistencePlugun = (store) => {// 初始化时读取本地存储const saveState = localStorage.getItem('vuex-state');if(saveState){store.replaceState(JSON.parse(saveState));}// 监听 mutations 自动自动保存store.subscribe((mutation, state) => {localStorage.setItem('vuex-state', JSON.stringify(state))})
}const store = new Vuex.Store({plugins: [persistencePlugun],  // 开发环境使用
})

高级技巧与最佳实践

1、严格模式

const store = new Vuex.Store({strict: process.env.NODE_ENV !== 'production', // 生产环境关闭// ...
});

2、表单处理

<input :value='message' @input='updateMessage'><script>
export default {computed:{message: {get() { return this.$store.state.message }set(value) { this.$store.commit('updateMessage', value)}}}
}
http://www.dtcms.com/wzjs/812815.html

相关文章:

  • 深圳网站建设公司排行榜鸿鑫建设集团有限公司网站
  • 给企业做网站如何定价娄底建设局网站
  • 网站开发就业培训佛山响应式网站
  • 股票做T网站网站 项目 需求
  • 代做动画毕业设计的网站wordpress 网站白屏
  • 株洲网站建设企业网站设置ico
  • 学校为什么要做网站什么网站可以做兼职设计
  • 做网站需要续费吗企业官方网站的建设
  • 想建个网站找谁网站推广应该注意什么
  • 怎样做咨询网站wordpress基于
  • 广西省河池建设局网站宁波网络推广平台哪里有
  • 怎样做网站seo网站首页制作公司
  • 表白网站制作模板为什么要建设商城网站
  • 济南 网站设计公司酒店管理专业建设规划
  • 有什么网站可以做浏览单软文怎么写比较吸引人
  • 网站制作沈阳云速建站怎么样
  • 公众号兼职网站开发wordpress 静态
  • 下载的网站模版怎么用福田专门做网站推广公司
  • 搜索引擎友好的网站有哪些特点江苏城乡住房和城乡建设厅网站
  • 大连网站建设选高合科技做电商网站的框架结构图
  • 制作短链接网站临沂网站推广
  • 设计师逛的网站wordpress添加作者
  • 中国佛山手机网站建设wordpress 模拟登陆
  • 手机版的网站开发保定网站建设团队
  • 网站在线演示html网页制作如何加入图片
  • 伊宁网站建设优化怎么用div布局做网站
  • dedecms 网站访问量长沙城乡建设网站首页
  • 深圳网站建设公司的英文名是wordpress 百度搜索图片不显示
  • 公司网站可以做服务器吗建筑网站大全免费
  • 基层建设网站是不是停办了做网站界面用什么软件