Redux的State不应该全部放在Store里
使用了redux管理应用的状态,应用的状态不应该全部放在Store里面。
前端状态主要有一下两种:
1. Domain data
2. UI State
1. Domain data
来自于服务端对领域模型的抽象,比如user,product,这个应该放在Store,方便更新data
2. UI State
大部分的UI State不应该放在Store中,应该使用组件私有state。
1. UI层面的toggle状态
主要包括 组件的显示隐藏,按钮的disable,列表的折叠展开等
2. 表单中的input的state
3. 组件中的动画相关的状态,例如坐标值
总之,Redux中的State遵循以下原则:
1. 怎么不笨拙,就怎么做
2. 需要全局共享的状态,才需要放在Store中,不影响app全局的短暂状态,放在组件内部
3. 一个组件内部的状态,频繁修改,若放在store中,则会频繁更新store,由此产生的state的快照也没有意义
4. 控件的state不会对任何其他控件产生影响,也不依赖store中的state时,就应该锁在控件内,不要放出了污染Store
5. 常见的一些频繁更新的状态,组件的style的height属性,应该作为私有状态,挂在eventlistener上来动态更新,
form表单中的input的state,应该是私有状态,不应该放在Store中,输入一个‘hello world’,产生11个state快照
显然没有意义,还会影响性能,不迷信一些开源组件,例如 redux-form 的做法
6. 私有的UI State放在Store,使用action进行切换,会增加额外的代码量,不会产生任何收益
参考:https://segmentfault.com/a/1190000009540007
https://www.jianshu.com/p/b53204339730
http://react-china.org/t/redux/8436
https://blog.csdn.net/a986597353/article/details/78646301
Redux的State不应该全部放在Store里的更多相关文章
- react中界面跳转 A界面跳B界面,返回A界面,A界面状态保持不变 redux的state方法
在上一篇文章中说过了react中界面A跳到B,返回A,A界面状态保持不变,上篇中使用的是传统的localStorage方法,现在来使用第二种redux的state方法来实现这个功能 现在我刚接触red ...
- Ext.js的store里放model,还是field?
按别人的经验, 一般来说,如果通用性强的应用,STORE里存放MODEL,便于重用代码. 如果通用性较弱的(报告,图表),则考虑使用field进行定制.
- 一个App从创意到最终上架到App Store里的整个过程是怎样的?
一个App从创意到最终上架到App Store里的整个过程是怎样的? 制作App需要什么软件?应该看什么书?需要哪些设备?推到App Store里,需要注册什么网站?是否需要付费?需要什么证书之类的? ...
- VR中为什么需要把游戏音频放在聚光灯里?
VR中为什么需要把游戏音频放在聚光灯里? 本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/de ...
- [Functional Programming ADT] Initialize Redux Application State Using The State ADT
Not only will we need to give our initial state to a Redux store, we will also need to be able to re ...
- 动手实现 Redux(二):抽离 store 和监控数据变化
上一节 的我们有了 appState 和 dispatch: let appState = { title: { text: 'React.js 小书', color: 'red', }, conte ...
- sql之表连接 筛选条件放在 连接外和放在连接里的区别
使用一个简单的例子,说明他们之间的区别 使用的表:[Sales.Orders]订单表和[Sales.Customers]客户表,和上一篇博客的表相同 业务要求:查询出 : 所有的用户 在 2012-1 ...
- LSM Tree 学习笔记——本质是将随机的写放在内存里形成有序的小memtable,然后定期合并成大的table flush到磁盘
The Sorted String Table (SSTable) is one of the most popular outputs for storing, processing, and ex ...
- Java的常量接口思考,项目中的常量是放在接口里还是放在类里呢?
最近在看一本书 Java与模式,里面提了一句不建议使用常量接口,甚至举了个java源码的反例, 蛋疼的是没有说为什么? 查了网上一圈发现他们也是知道怎么做而不知道为什么这么做. 然后我只能找谷歌了,翻 ...
随机推荐
- php常用几个数组的区别
本文主要介绍的php数组函数主要有:sort.rsort.asort.arsort.ksort.krsort 测试数据定义一个关联数组如下: $data=[ 'f'=>123, 'b'=> ...
- Git一分钟系列--快速安装git客户端
在项目开发过程中,几乎所有公司都会用到版本控制工具来管理自己的项目资源文件,比如Git,SVN. 什么是svn? 版本控制软件,通过svn来实现版本控制首先需要搭建一个服务器,在服务器上创建仓库保存项 ...
- 【CentOS】下安装RabbitMQ教程
系统版本: 安装依赖: 由于RabbitMQ依赖Erlang, 所以需要先安装Erlang. Erlang的安装方式大概有两种: (1) Erlang Solution安装(推荐) wget http ...
- Linux命令应用大词典-第42章 PostgreSQL数据库
42.1 initdb:初始化PostgreSQL数据库 42.2 pg_ctl:控制PostgreSQL服务 42.3 psql:PostgreSQL交互式客户端工具 42.4 createdb:创 ...
- TW实习日记:第28天
同前两天一样,等接口,开发,调试接口.重复地做着低级代码得搬运工作,确实挺没意思的.怪不得有些人一直说写低级代码很无聊,没有创造性和成就感.31号准备溜了,还是好好复习准备秋招吧. 挖坑清单: Vue ...
- 82. Single Number [easy]
Description Given 2*n + 1 numbers, every numbers occurs twice except one, find it. Example Given [1, ...
- 词嵌入向量WordEmbedding
词嵌入向量WordEmbedding的原理和生成方法 WordEmbedding 词嵌入向量(WordEmbedding)是NLP里面一个重要的概念,我们可以利用WordEmbedding将一个单 ...
- Map Reduce Application(Partitioninig/Binning)
Map Reduce Application(Partitioninig/Group data by a defined key) Assuming we want to group data by ...
- vs2008 c#项目调试dll源码,问题:“若要调试此模块,请将其项目生成配置更改为“调试”模式” 的解决方案
情况: 1:有程序 Trans.exe 的vs2008 c#源码:Trans.exe项目里引用了 Water.dll: 2:有Water.dll的项目源码: 3:想在Trans.exe里调试Water ...
- 2019-1-92.4G射频芯片培训资料
2019-1-92.4G射频芯片培训资料 培训 RF 小书匠 欢迎走进zozo的学习之旅. 2.4G芯片选型 2.4G芯片开发 Q&A 2.4G芯片选型 芯片类型 soc 防盗标签2.4G无 ...