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