V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
Trello
V2EX  ›  问与答

关于 React State 的立即计算和懒计算,不太理解,希望大佬能够解惑。

  •  
  •   Trello · 2022-08-03 18:15:48 +08:00 · 897 次点击
    这是一个创建于 850 天前的主题,其中的信息可能已经有所发展或是发生改变。
    主要困惑点

    1. 更新队列的先后执行顺序

    2. 立即计算和懒计算的切换时机

    我在这篇文章下提问了,哪位大佬有时间的,希望能不吝赐教,提前谢过!
    https://github.com/yaofly2012/note/issues/204
    8 条回复    2022-08-04 08:24:36 +08:00
    Trello
        1
    Trello  
    OP
       2022-08-03 18:36:20 +08:00 via iPhone
    有这方面的文章推荐也行,感觉这方面的资料好少,也可能是我搜索的问题。
    throns
        2
    throns  
       2022-08-03 18:55:36 +08:00 via iPhone
    你用的是 react 18 来验证的,react 18 版本的 setState 是 Automatic batching ,你可以去看一下这个新特性。他那篇文章是 20 年的,有些系列不适用 18 版本的
    throns
        3
    throns  
       2022-08-03 19:01:46 +08:00 via iPhone
    你可以尝试一下关闭 Automatic batching ,再验证一下那篇博文的正确性。我看了一下,不知道为啥生造了这么多名词,看着真累。只说其然,而不说所以然,真想了解细节建议看源码。
    Trello
        4
    Trello  
    OP
       2022-08-03 19:20:44 +08:00
    @throns 谢谢大佬,不过这个应该与 react 18 的自动批处理没关系,自动批处理使得在原生事件或异步代码中的 setState 能够批量处理,重渲染一次。我举的例子用的都是 react 合成事件中的 setState ,这个本来就作批处理的,应该没有关系。
    Trello
        5
    Trello  
    OP
       2022-08-03 19:23:23 +08:00
    @throns 直接看源码对我来说,感觉还是有点困难,大佬有什么推荐的 React 进阶学习途径吗?比如博客、专栏、书籍之类的?最近确实感觉有点瓶颈期了,能写业务,但是对 react 的一些现象还是感到困惑,稀里糊涂的,想提升一下。
    throns
        6
    throns  
       2022-08-03 19:25:44 +08:00 via iPhone
    @Trello 感觉有点引流,可以去看一下卡颂的 React 技术揭秘: https://react.iamkasong.com/
    Trello
        7
    Trello  
    OP
       2022-08-03 19:36:32 +08:00
    @throns 好的,谢谢大佬,我后面研读一下,感谢!
    Trello
        8
    Trello  
    OP
       2022-08-04 08:24:36 +08:00
    第一个问题没事了,自己想明白了。

    懒计算时,更新队列执行顺序依据 useState 声明顺序,然后更新队列内的 setState 依次执行。

    立即计算时,不考虑更新队列,根据 setState 顺序依次执行。

    我把思考写在这篇博文下面了,感兴趣的可以移步看看。
    https://github.com/yaofly2012/note/issues/204

    第二个问题主要是懒计算切换立即计算的时机,我还没想通,希望有大佬解惑。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   971 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 20:16 · PVG 04:16 · LAX 12:16 · JFK 15:16
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.