最近看 React,有个问题有点好奇

2021-09-08 09:42:42 +08:00
 OmO

eact Function Component 对于对象的大小好像没有限制,但如果对象大小特别大,还是一样直接丢到 prop 里去吗?对于这部分对象特别大的 state,有没有其他更好的处理方式哦在实践中?

3495 次点击
所在节点    React
9 条回复
xieqiqiang00
2021-09-08 09:56:11 +08:00
都是传递的指针,大小不重要吧
如果这个对象会影响 react 是否更新的行为,那你就算不传也一样要想办法用别的方法判断
murmur
2021-09-08 10:06:29 +08:00
vdom diff 很快,慢的是渲染,而且就算是 vdom 也不可能无穷无尽的改,真的涉及游戏、动画这种要求实时性、fps 的,肯定是手动优化
react 也可以优化,不是 state 变了就一定 rerender
yuuko
2021-09-08 10:19:36 +08:00
传递没啥问题,react FC 组件的问题是父组件更新,即使传给子 FC 组件 props 没变化 render 函数也会执行,这个怕是很多小白不知道,所以函数内确保不做非常耗时的任务,或用 React.memo
en20
2021-09-08 10:40:39 +08:00
let t = {a:1}
let b = t

b === t

js 基础 存的只是引用地址
robinlovemaggie
2021-09-08 11:30:17 +08:00
如果数据量特别大,应该优化你的数据大小和传输方式,而不是让浏览器的 render“忍一下”。
iugo
2021-09-08 12:36:39 +08:00
@yuuko 光这样说可能造成小白误解. 一般 DOM 渲染的开销远大于 JS 执行的开销, 虽然每次函数都会执行, 但执行之后会进行 DOM 树检查, 只重新渲染必要的节点. 一般来说, 不会因为函数的重新渲染造成性能问题. 如果真的有问题, 再用 memo 优化也不迟, 插拔 memo 基本是无痛的.
yuuko
2021-09-08 14:37:42 +08:00
@iugo 你怕是没看懂我说什么,我都说了,避免函数内避免执行耗时任务,我说的耗时任务根本不是什么 DOM 渲染
JerryCha
2021-09-08 16:43:08 +08:00
没爆堆就不用担心
iugo
2021-09-08 19:49:43 +08:00
@yuuko 假设别人不懂 不利用沟通吧.

从头到尾你说的没错. 只是希望大家不要过度强调 memo 优化, 因为大多数函数本身的计算都不是性能瓶颈, 即便看到函数总是在执行, 也不要过度担心.

强调 DOM 开销是因为, 如果用 memo, 优化的路径也可能是返回一个 ReactNode 而不是数据对象本身.

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/800552

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX