Recoil 中多级数据联动及数据重置的合理做法
前情回顾书接上回,前面引出了在数据存在级联的情况下,各下拉框之间的默认值及值变化的处理。简单回顾一下: 场景是:
问题:
解决:
新的问题进一步实践,会发现这种解决方式存在缺陷,在多级级联的情况下,比如三个下拉框 A->B->C,A 决定 B, B 决定 C,按照这个解决思路,
这显然不科学,非常冗余。同时从组件解耦的角度来看,A,B 需要知道谁依赖了自己从而重置它们,这种耦合非常难以维护。 因此应该反过来,将解决问题的逻辑囿于组件自身才是科学的做法。 于是 A 不管其他,只管自己随便随便怎么变化,B 中监听 A 变化然后做出反应以重置自己,C 监听 B 的变化以重置自己。这样逻辑做到了内聚无耦合。 而之前文章中之所以没用这种方式,是因为发现该方式具有滞后性,组件内部会停留在错误的值上渲染一次。 export function ZoneSelect() { 这里会先打印一次旧值,等 状态的正确使用细思会发现,上面之所以会有这种错误是因为姿势没对,假若我们要使用可用区的值,应该在 useEffect(() => { 此时打印就会得到正确的结果。 按照这个逻辑修正后的组件及联动关系就成了: RegionSelect.tsx export function RegionSelect() { ZoneSelect.tsx export function ZoneSelect() { 优化数据的依赖关系进一步思考,导致可用区需要重置的直接原因其实并不是地域发生了变化,而是地域发生变化后,可用区下拉框的可选项发生了变化,亦即 export function ZoneSelect() { 这样一来,组件内部就清爽多了,只有自身相关的数据,甚至都去掉了对
|
The text was updated successfully, but these errors were encountered: |
最新文章
- DevExpress GridControl 中下拉框联动效果的实现(及支持文本框录入情况)
- android 配置环境变量
- STL学习:STL库vector、string、set、map用法
- KoaHub.JS基于Node.js开发的mysql的node.js驱动程序代码
- Python3中无法导入ssl模块的解决办法
- mac缺少librt问题记录
- POJ 1015 Jury Compromise(双塔dp)
- SpringBoot的学习【7.引入配置文件】
- NSScanner类的基本用法
- idea集成uglifyjs2
- 天猫魔盒1代TMB100E刷机, 以及右声道无声的问题
- 写出js内存泄漏的问题?
- python自动安装mysql5.7【转】
- LRU缓存淘汰算法
- PAT 1029. Median
- Gensim入门教程
- windows下查看dns缓存和刷新缓存
- 利用.NET Code Contracts实现运行时验证
- BZOJ1060:[ZJOI2007]时态同步——题解
- 387 First Unique Character in a String 字符串中的第一个唯一字符
热门文章
- SDK &; 埋点 &; user behavior tracker
- vue &; watch props
- react slot component with args
- vue &; template &; v-else &; v-for bug
- 若依管理系统RuoYi-Vue(二):权限系统设计详解
- C++算法代码——选举学生会
- npm与package.json快速入门
- Spring注解@PropertySource加载配置文件和SpringBoot注解@Value、@ConfigurationProperties进行属性映射
- 后端程序员之路 16、信息熵 、决策树、ID3
- PAT-1148(Werewolf )思维+数学问题