1
shakukansp 2021-08-05 10:32:46 +08:00
办法就是不用 react……
|
2
kop1989 2021-08-05 10:33:08 +08:00
所以你要去学习 react Context 的使用。
|
3
binaryify 2021-08-05 10:36:15 +08:00 1
人生苦短,我用 Vue
|
4
kop1989 2021-08-05 10:38:09 +08:00
换而言之,如果一个 dom 的数据与逻辑必须强依赖其“父亲”,那其实他就不是一个独立的“组件”,其渲染与数据处理的动作必然和其他兄弟组件有耦合关系(前提是你的组件规划合理)。所以你也应该接受带者父亲整体重绘。
|
5
kop1989 2021-08-05 10:46:29 +08:00
而传统的针对性操作子 dom 组件的方式,其实是你通过人脑处理了兄弟组件的耦合关系。
而 react 等工程化库的目的,就是将组件间充分解耦。 解耦的结果必然会出现冗余与浪费。而当前的互联网带宽与客户端性能也禁得起这样的浪费。 |
6
sillydaddy OP @kop1989
不太明白。组件的一个作用是可以复用。这里我看不出父组件与子组件有什么“强依赖”的关系。父组件只是把数据传递给子组件啊。比如父组件 A 下面有子组件 A1 、A2 、A3,子组件 A1 变了,修改 A1 对应的数据 data1,这时 A2,A3 数据根本没有变化,也没有依赖 A1,但是也要重绘。 |
7
kop1989 2021-08-05 10:51:44 +08:00
@sillydaddy #6 所以你的解决方式有两种。
1 、将 A1 剥离 A 。 2 、通过全局变量(比如 context )来控制 A1 所需要的数据。 如果这两者都不能,那就其实说明 A1 与 A,以及 A2A3 其实有耦合关系。只不过未见得是数据上的。 |
8
huai 2021-08-05 10:53:30 +08:00 1
|
9
binaryify 2021-08-05 11:01:09 +08:00 1
用 shouldcomponentupdate 比较数据或者 mobx 自动判断
|
10
XTTX 2021-08-05 11:03:08 +08:00 1
现在都在用 useEffect 替代 cmd,purecomponet 。useCallback 对应 function useMemo 对应运算结果。 建议 op 去学 react hooks, 因为它已经是主流了
|
11
dashixiong1990 2021-08-05 11:03:42 +08:00 1
组件 React.memo
数据 immer |
12
XTTX 2021-08-05 11:07:19 +08:00
react hooks 里 包括 useContext, 可以带入 reducer. 你描述的问题就是 react 以前的传统问题,hooks 可以解决。useContext 大部分情况下替代 redux 。你设计好的话,prop drilling 不会是问题。
|
13
DICK23 2021-08-05 11:09:59 +08:00
render 消耗其实不太大,大部分组件哪怕重新走了一遍 render 流程,实际性能影响微乎其微。
实在不行就手写 memo 的比较函数,手动指定依赖值 |
14
sherryqueen 2021-08-05 11:13:21 +08:00
memo 比较函数.
|
15
sweetcola 2021-08-05 11:23:01 +08:00
可以把数据拆分成几个 reducer(slice) 放进 Redux 里,把 state 下沉到子组件。
|
16
ykrank 2021-08-05 11:23:10 +08:00
你需要的是 mobx 之类吧
|
17
chenpingan 2021-08-05 11:39:03 +08:00
react.memo 或者 useMemo 都可以解决这个问题
|
18
KouShuiYu 2021-08-05 11:50:51 +08:00
改用 vue 就不会有这个问题,
|
19
charlie21 2021-08-05 14:26:33 +08:00
很典型的问题
|
20
HAYWAEL 2021-08-05 15:12:13 +08:00 1
|
21
meteor957 2021-08-05 15:35:38 +08:00
引用类型用 useMemo 包裹,配合 React.memo
用 react 肯定避免不了 re-render,但是渲染耗时大的组件,应该要做性能优化去减少重复渲染。 普通的组件像 button 那种,不需太关心。 |
22
66beta 2021-08-05 15:37:02 +08:00
所以为什么小尤同志敢说 vue 性能略高于 react~
|
23
xutao881 2021-08-05 16:14:19 +08:00
在你的业务场景还没有触及到 react 性能瓶颈的时候,没必要去担心 render 的性能问题,写 class 组件确实有这种层层传递 prop 的问题,更多的时候你应该考虑怎么去提取复杂 prop 到全局管理,如果还是觉得不爽,用 hooks 吧,监听父级变动可以很优雅。
|
24
aaronlam 2021-08-05 20:47:47 +08:00 via iPhone
楼主自己根据大伙的答案总结还是很到位,很赞!
|