设计模式(2): 响应store中数据的变化
概述
最近最近做项目的时候总会思考一些大的应用设计模式相关的问题,我把自己的思考记录下来,供以后开发时参考,相信对其他人也有用。
store里面响应数据变化
通常情况下,我们会把数据存在store里面,并且,有时我们也需要跟踪store里面的数据变化,并作出响应。例子如下:
export default {
computed: {
categories: state => state.categories.categories,
},
watch: {
categories() {
this.fetchCardData();
},
},
methods: {
fetchCardData() {
// 请求卡片数据
},
},
}
如上所示,当store里面的categories改变的时候,我们会自动调用api去请求数据。
不响应store里面的数据变化
上面的例子里面,每次当categories改变的时候,fetchCardData方法都会被调用。有些时候,这并不是我们想要的,我们想要的是,当xxxx的时候,categories会改变,fetchCardData方法会跟着被调用;当xxxx的时候,categories会改变,fetchCardData方法又不会跟着被调用,怎么办呢?
方法是创造一个标记,但是如何优雅的创造标记呢?我有一个方法如下所示:
// store.js
const state = {
categories: [],
categoriesChanges: 0,
};
const actions = {
updateCategories({ commit }, value) {
// 如果带有shouldNotChange,则表示不要刷新页面
if (value.shouldNotChange) {
commit(types.UPDATE_CATEGORIES, value.data);
} else {
commit(types.UPDATE_CATEGORIES, value);
commit(types.UPDATE_CATEGORIES_CHANGES);
}
},
};
const mutations = {
[types.UPDATE_CATEGORIES](state, value) {
state.categories = value;
},
[types.UPDATE_CATEGORIES_CHANGES](state) {
state.categoriesChanges += 1;
},
};
// component.js
export default {
computed: {
categories: state => state.categories.categories,
categoriesChanges: state => state.categories.categoriesChanges,
},
watch: {
categoriesChanges() {
this.fetchCardData();
},
},
methods: {
fetchCardData() {
// 利用this.categories的部分数据来请求卡片数据
},
},
}
// business.js
this.$store.dispatch('updateCategories', value); // 会自动调用fetchCardData方法
const payload = {
shouldNotChange: true,
data: [...value],
};
this.$store.dispatch('updateCategories', payload); // 不会自动调用fetchCardData方法
这样,我们发出同一个action,却能达到2种不同的效果,非常方便。
设计模式(2): 响应store中数据的变化的更多相关文章
- 黎活明8天快速掌握android视频教程--21_监听ContentProvider中数据的变化
采用ContentProvider除了可以让其他应用访问当前的app的数据之外,还有可以实现当app的数据发送变化的时候,通知注册了数据变化通知的调用者 其他所有的代码都和第20讲的一样,不同的地方看 ...
- 25、vuex改变store中数据
以登录为例: 1.安装vuex:npm install vuex --save 2.在main.js文件中引入: import store from '@/store/index.js'new Vue ...
- Nutch2.3分布执行过程中Mongodb中数据的变化
inject $ nutch inject /opt/nutch/runtime/local/urls/ > db.stats() { "db" : "nutch& ...
- Vue刷新页面VueX中数据清空了,怎么重新获取?
Vue刷新页面VueX数据清空了,怎么重新获取? 点击打开视频讲解更详细 在vue中刷新页面后,vuex中的数据就没有了,这时我们要想使用就要重新获取数据了, 怎么在刷新后重新获取数据呢??? 这时我 ...
- 使用vuex中的store存储数据
Vuex是一个专门为Vue.js应用程序开发的状态管理模式,这个状态自管理应用包括三个模式 state 驱动应用的数据源 view 以声明方式将state映射到视图 actions 响应在view上的 ...
- Vue2手写源码---响应式数据的变化
响应式数据变化 数据发生变化后,我们可以监听到这个数据的变化 (每一步后面的括号是表示在那个模块进行的操作) 手写简单的响应式数据的实现(对象属性劫持.深度属性劫持.数组函数劫持).模板转成 ast ...
- React-使用imutable.js来管理store中的数据
reducer.js中store的数据是不能改变的,用原始的方法要手动的保证store不被修改,存在风险.imutable.js可以生成一个不可改变的对象,可以避免掉自己不小心修改掉store的情况. ...
- 解决刷新页面vuex store中数据丢失的问题
**问题背景:**页面刷新后,vuex中的数据丢失.这是因为:js代码是运行在内存中的,代码运行时的所有变量.函数也都是保存在内存中的.进行刷新页面的操作,以前申请的内存被释放,重新加载脚本代码,变量 ...
- 解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题
解决WPF程序中ListBox ItemsSource变化时不重置ScrollBar的问题 当我们改变ListBox的ItemsSource时,会发现这样一个问题:数据源变化时,虽然控件中的内容会跟着 ...
随机推荐
- NoSQL与其常见的产品
一. 什么是NoSQL NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL",它是一种非关系型数据库. 二. 为什么要有NoSQL 在现代的计算系统上每 ...
- WPF C# 字符串读写文件
WPF C# 字符串读写文件 public class 字符串读写文件 { /// <summary> /// Encoding.Unicode.GetString 如果使用Encodin ...
- wpf Textbox 回车就换行
将 TextWrapping 属性设置为 Wrap 会导致输入的文本在到达 TextBox 控件的边缘时换至新行,必要时会自动扩展 TextBox 控件以便为新行留出空间. 将 AcceptsRetu ...
- laravel-admin后台框架基本使用
建立控制器 在app/Admin/Controllers新建对应的控制器来管理某个数据表.控制器例子: <?php namespace App\Admin\Controllers; use En ...
- .net中对象序列化技术
序列化是将对象状态转换为可保持或传输的格式的过程.与序列化相对的是反序列化,它将流转换为对象.这两个过程结合起来,可以轻松地存储和传输数据.例如,可以序列化一个对象,然后使用 HTTP 通过 Inte ...
- 索引介绍,转载自:https://tech.meituan.com/2014/06/30/mysql-index.html
索引原理 除了词典,生活中随处可见索引的例子,如火车站的车次表.图书的目录等.它们的原理都是一样的,通过不断的缩小想要获得数据的范围来筛选出最终想要的结果,同时把随机的事件变成顺序的事件,也就是我们总 ...
- Synchronized 失效原因
Synchronized 同步出现失效 Synchronized ,大家都知道这个是Java 提供的一种原子性内置锁,其实现原理是通过获取对象的监视器monitor进行来实现同步的,只有当线程获取到对 ...
- share point 查询文档库 过滤 文档名称和上传时间
SPQuery query = new SPQuery(); CAMLBuilder.WhereBuilder whereBuilder = null; pageCount = ; if (!stri ...
- 《SaltStack技术入门与实践》—— 实践案例 <中小型Web架构>3 Memcached配置管理
实践案例 <中小型Web架构>3 Memcached配置管理 本章节参考<SaltStack技术入门与实践>,感谢该书作者: 刘继伟.沈灿.赵舜东 Memcached介绍 Me ...
- web project 解决 中文乱码问题
1.get请求-->在tomcat-->conf-->server.xml <Connector connectionTimeout="20000" por ...