Open jtwang7 opened 3 years ago
import { useCallback } from 'react';
const funcName = useCallback(
( ...args ) => { do something sync... }
, [ dependency list ])
import { useCallback } from 'react';
const funcName = useCallback(
async ( ...args ) => { do something sync... }
, [ dependency list ])
useCallback 的 async 异步回调注册,与同步注册一样,用 useCallback 将异步 async 函数包裹,并添加依赖项即可。
React - Hooks (useMemo & useCallback)
参考文章:
前言
Hooks 中,对于状态的持久性保存是非常常见的。由于函数组件其本身就充当了
render()
函数的功能,因此每次组件重新渲染时,都会执行函数组件,导致函数组件内部定义的变量和方法都会被重新创建一遍。memoized
为了让变量能够被保存,有以下几种办法:
闭包
在函数组件外部定义的变量或方法不会被重新定义,因为组件重新渲染时,仅重新执行函数组件而不是整个 JS 脚本。
useMemo
useMemo 接收一个函数和依赖项数组,并返回一个 memoized 值。该值能持久保存,它仅会在某个依赖项改变时才被重新计算。该优化有助于避免在每次渲染时都进行高开销的计算。
useCallback
useCallback 接收一个内联回调函数参数和一个依赖项数组(子组件依赖父组件的状态,即子组件会使用到父组件的值) ,useCallback 会返回该回调函数的 memoized 版本,该回调函数仅在某个依赖项改变时才会更新。
总结
闭包、useMemo、useCallback 目的都是为了将变量 memoized 化,优化性能,减少每次组件渲染都要重新创建变量或函数的问题。