cutemurphy2000
V2EX  ›  React

有个 useCallback 的疑问

  •  
  •   cutemurphy2000 · Dec 25, 2021 · 3540 views
    This topic created in 1776 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
    coolzjy
    Dec 25, 2021
    1
    > 父组件更新的时候,子组件不就自动 render 了

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

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