V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
OmO
V2EX  ›  React

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

  •  
  •   OmO · 2021-09-08 09:42:42 +08:00 · 3495 次点击
    这是一个创建于 1203 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    9 条回复    2021-09-08 19:49:43 +08:00
    xieqiqiang00
        1
    xieqiqiang00  
       2021-09-08 09:56:11 +08:00
    都是传递的指针,大小不重要吧
    如果这个对象会影响 react 是否更新的行为,那你就算不传也一样要想办法用别的方法判断
    murmur
        2
    murmur  
       2021-09-08 10:06:29 +08:00
    vdom diff 很快,慢的是渲染,而且就算是 vdom 也不可能无穷无尽的改,真的涉及游戏、动画这种要求实时性、fps 的,肯定是手动优化
    react 也可以优化,不是 state 变了就一定 rerender
    yuuko
        3
    yuuko  
       2021-09-08 10:19:36 +08:00
    传递没啥问题,react FC 组件的问题是父组件更新,即使传给子 FC 组件 props 没变化 render 函数也会执行,这个怕是很多小白不知道,所以函数内确保不做非常耗时的任务,或用 React.memo
    robinlovemaggie
        5
    robinlovemaggie  
       2021-09-08 11:30:17 +08:00
    如果数据量特别大,应该优化你的数据大小和传输方式,而不是让浏览器的 render“忍一下”。
    iugo
        6
    iugo  
       2021-09-08 12:36:39 +08:00
    @yuuko 光这样说可能造成小白误解. 一般 DOM 渲染的开销远大于 JS 执行的开销, 虽然每次函数都会执行, 但执行之后会进行 DOM 树检查, 只重新渲染必要的节点. 一般来说, 不会因为函数的重新渲染造成性能问题. 如果真的有问题, 再用 memo 优化也不迟, 插拔 memo 基本是无痛的.
    yuuko
        7
    yuuko  
       2021-09-08 14:37:42 +08:00
    @iugo 你怕是没看懂我说什么,我都说了,避免函数内避免执行耗时任务,我说的耗时任务根本不是什么 DOM 渲染
    JerryCha
        8
    JerryCha  
       2021-09-08 16:43:08 +08:00
    没爆堆就不用担心
    iugo
        9
    iugo  
       2021-09-08 19:49:43 +08:00
    @yuuko 假设别人不懂 不利用沟通吧.

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

    强调 DOM 开销是因为, 如果用 memo, 优化的路径也可能是返回一个 ReactNode 而不是数据对象本身.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5889 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 01:59 · PVG 09:59 · LAX 17:59 · JFK 20:59
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.