eact Function Component 对于对象的大小好像没有限制,但如果对象大小特别大,还是一样直接丢到 prop 里去吗?对于这部分对象特别大的 state,有没有其他更好的处理方式哦在实践中?
1
xieqiqiang00 2021-09-08 09:56:11 +08:00
都是传递的指针,大小不重要吧
如果这个对象会影响 react 是否更新的行为,那你就算不传也一样要想办法用别的方法判断 |
2
murmur 2021-09-08 10:06:29 +08:00
vdom diff 很快,慢的是渲染,而且就算是 vdom 也不可能无穷无尽的改,真的涉及游戏、动画这种要求实时性、fps 的,肯定是手动优化
react 也可以优化,不是 state 变了就一定 rerender |
3
yuuko 2021-09-08 10:19:36 +08:00
传递没啥问题,react FC 组件的问题是父组件更新,即使传给子 FC 组件 props 没变化 render 函数也会执行,这个怕是很多小白不知道,所以函数内确保不做非常耗时的任务,或用 React.memo
|
5
robinlovemaggie 2021-09-08 11:30:17 +08:00
如果数据量特别大,应该优化你的数据大小和传输方式,而不是让浏览器的 render“忍一下”。
|
6
iugo 2021-09-08 12:36:39 +08:00
@yuuko 光这样说可能造成小白误解. 一般 DOM 渲染的开销远大于 JS 执行的开销, 虽然每次函数都会执行, 但执行之后会进行 DOM 树检查, 只重新渲染必要的节点. 一般来说, 不会因为函数的重新渲染造成性能问题. 如果真的有问题, 再用 memo 优化也不迟, 插拔 memo 基本是无痛的.
|
8
JerryCha 2021-09-08 16:43:08 +08:00
没爆堆就不用担心
|
9
iugo 2021-09-08 19:49:43 +08:00
@yuuko 假设别人不懂 不利用沟通吧.
从头到尾你说的没错. 只是希望大家不要过度强调 memo 优化, 因为大多数函数本身的计算都不是性能瓶颈, 即便看到函数总是在执行, 也不要过度担心. 强调 DOM 开销是因为, 如果用 memo, 优化的路径也可能是返回一个 ReactNode 而不是数据对象本身. |