V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
cutemurphy2000
V2EX  ›  React

有个 useCallback 的疑问

  •  
  •   cutemurphy2000 · Dec 25, 2021 · 2941 views
    This topic created in 1596 days ago, the information mentioned may be changed or developed.

    很多文章说 useCallback 的好处就是缓存一个函数,这样子组件如果从父组件收到一个函数的 props ,就没有变化, 子组件就不需要重新 render 。。。

    我的疑问是,父组件更新的时候,子组件不就自动 render 了? 这样的优化有啥意义?

    10 replies    2021-12-27 14:34:52 +08:00
    coolzjy
        1
    coolzjy  
       Dec 25, 2021
    > 父组件更新的时候,子组件不就自动 render 了

    当然不是这样,子组件 props 不变的情况下是不会重新渲染的。
    coolzjy
        2
    coolzjy  
       Dec 25, 2021
    @coolzjy 补充下,在使用 pure component / memo 的情况下是这样子的。
    cutemurphy2000
        3
    cutemurphy2000  
    OP
       Dec 25, 2021
    @coolzjy 那还是有前置条件的吖
    noe132
        4
    noe132  
       Dec 25, 2021 via Android
    useCallback = (fn, deps) => useMemo(() => fn, deps)
    ericls
        5
    ericls  
       Dec 26, 2021
    parent 传入的 props 或者 自己的 state 变的时候,function body 肯定是要重头执行一次的,如果不用 memoization 的话,那每一次定义的 function 都是一个全新的 function
    meteor957
        6
    meteor957  
       Dec 26, 2021 via Android   ❤️ 1
    子组件没有 memo 的话,这种优化确实没有意义。

    但 useCallback 不止是这一个作用。假设某个函数被当作依赖传给 useEffect ,并且没有被 useCallback 缓存的话,很有可能造成渲染死循环。
    shabbyin
        7
    shabbyin  
       Dec 26, 2021
    useCallback 等于函数的 useMemo
    tousfun
        9
    tousfun  
       Dec 26, 2021 via iPhone
    @mirone 好家伙,大佬的博客直接用英语写的?
    DICK23
        10
    DICK23  
       Dec 27, 2021
    这个基本就是 useMemo 的变形,其实也没啥用,后期 API 都会被改掉
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2759 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 41ms · UTC 15:35 · PVG 23:35 · LAX 08:35 · JFK 11:35
    ♥ Do have faith in what you're doing.