Trello
V2EX  ›  问与答

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

  •  
  •   Trello · Aug 3, 2022 · 1374 views
    This topic created in 1540 days ago, the information mentioned may be changed or developed.
    主要困惑点

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

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

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

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

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

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

    第二个问题主要是懒计算切换立即计算的时机,我还没想通,希望有大佬解惑。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   978 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 39ms · UTC 20:08 · PVG 04:08 · LAX 13:08 · JFK 16:08
    ♥ Do have faith in what you're doing.