You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
接着我们继续延伸约定,组件不允许直接变更属于 store 对象的 state,而应执行 action 来分发(dispatch) 事件通知 store 去改变,这样最终的样子跟 Vuex 的结构就类似了。这样约定的好处是,我们能够记录所有 store 中发生的 state 变更,同时实现能做到记录变更、保存状态快照、历史回滚/时光旅行的先进的调试工具
vuex
Vue组件间通信方式回顾
Vuex核心概念和基本使用回顾
购物车案例
模拟实现Vuex
组件内的状态管理流程
Vue核心功能:数据驱动和组件化
state
:驱动应用的数据源view
:以声明方式将state映射到视图actions
:响应在view上的用户输入导致的状态变化Vue组件间通信方式回顾
父组件给子组件传值
props
接收数据子组件给父组件传值
$emit
传递参数不相关组件之间传值
使用
Event Bus
作为事件中心$emit
发布$on
订阅通过ref获取子组件
$refs
在使用子组件的时候,添加 ref 属性:
然后在父组件等渲染完毕后使用
$refs
访问:简易的状态管理方案
间互相传值很难跟踪数据的变化,如果出现问题很难定位问题
Vuex概念
使用场景
大型单页应用程序:
eg:购物车
核心概念
结构分析
State
store\index.js
app.vue
mapState
简化 State 在视图中的使用,mapState 返回计算属性Getter
store\index.js
app.vue
Mutaion
更改 Vuex 的 store 中的状态的唯一方法是提交 mutation。Vuex 中的 mutation 非常类似于事件:每个 mutation 都有一个字符串的 事件类型 (type) 和 一个 回调函数 (handler)。这个回调函数就是我们实际进行状态更改的地方,并且它会接受
state
作为第一个参数使用 Mutation 改变状态的好处是:集中的一个位置对状态修改,不管在什么地方修改,都可以追踪到状态的修改。可以实现高级的 time-travel 调试功能
store\index.js
app.vue
Action
Action 类似于 mutation,不同在于:
store\index.js
app.vue
Action 通过
store.dispatch
方法触发:Module
products.js
store\index.js
:导入两个模块通过
store.state.xxx
访问模块成员app.vue
严格模式
e.g:浏览器会报错,但数据还是会被修改
购物车案例
功能列表
商品列表
商品列表功能-Products.js
products 模块,
store/modules/products.js
store/index.js
中注册 products.js 模块views/products.vue
中实现商品列表的功能添加购物车-cart.js
store/modules/cart.js
store/index.js
中注册 cart 模块view/products.vue
中实现添加购物车功能弹出购物车窗口
src\components\pop-cart.vue
展示购物车列表
删除
src\store\modules\cart.js
小计
src\store\modules\cart.js
购物车
购物车列表
……
全选功能
store/modules/cart.js
Vuex插件介绍
以该项目为例:
src\store\index.js
简单模拟Vuex
初始化Vuex架构
src\myvuex\index.js
The text was updated successfully, but these errors were encountered: