具有复杂业务的公共组件的数据该如何管理
来源:5-2 State设计原则

一文先生
2020-02-29
假如我有一个A、B两个页面,它们共同使用C组件。
C组件里面又使用了D组件。
虽然已经被封装多层,但是D组件设计还是有比较复杂的数据展示与操作,比如监听内部输入框的输入、点击、失焦、聚焦等行为,监听到事件之后需要告知页面发生了怎样的更改。
在没有使用redux的时,在D组件捕获到某种事件之后,会通过props的形式将事件一级级传递给父级,直至传递给当前活跃的页面(A或者B其中的一个)。
如果引入redux该怎么设计redux的结构呢?
最初我的想法是以页面为维度,A、B各自设计一个state,各自的state里都保存关于公共组件的那一部分数据,当D组件监听到事件时,只改变当前活跃页面的state数据就好了。
但是这个写法感觉有点坑,那就是公共组件想要判断当时是在哪个页面下被使用,还需要告诉子组件当前是哪个组件在活跃(显示)状态。这样的设计感觉不太合理。
然后我想能不能以组件(也就是说老师所说的“领域”)为维度,只给组件设置一个state,把这个组件的相关数据都存到这个state里,A、B页面使用这个公共组件的时候,都是从这个公共组件的state里取值。但是这样就是A、B两个页面同时使用同一个state,感觉混用有点危险。
这个问题困扰了我比较久的时间,所以想问一下老师该怎么处理这个问题。
写回答
1回答
-
艾特老干部
2020-03-07
你好。如果这部分状态是属于同一业务领域,比如都是博客的文章领域,是应该放在一个state的,A组件对于这部分state的修改也是应该反映到 B组件中的。如果你不希望A组件修改的状态影响到B组件,那么这部分状态就不应该属于同一个业务领域,可以考虑作为UI状态存储。
00
相似问题