React:如何使用useCallback以避免全量更新?-灵析社区

CO_co

react 如何使用useCallback 避免全量更新? 在子组件的事件中使用useCallback ![fd3e60779771043277351a5329d1868.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/a272b1e2944e4a8b10be14abc41ebf08.png) 父组件 list.map 创建了子组件, 子组件触发事件导致 父组件的 list 发生变更, 于是组件全部发生了变化 这个过程中只有其中一个子组件发生了改变,所以我使用了 memo 包裹了一下 但是 传递的事件函数会重复创建,导致子组件全量更新 我应该如何使用useCallback 来实现顶点更新? onDrop(name)} onDragMove={(e: TKDragEvent) => onDragMove(e, index)} onMouseOver={() => dispatch(setSelectPointKey(name))} // 注释这样写会报错 // onDragEnd={useCallback(() => onDrop(name), [])} // onDragMove={useCallback((e: TKDragEvent) => onDragMove(e, index), [index])} // onMouseOver={useCallback(() => dispatch(setSelectPointKey(name)), [])} /> ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/ea835fbd390ee932391197de457116e2.png) ![image.png](https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/40d6574cb449602f487c586048031e73.png)

阅读量:148

点赞量:0

问AI
把 "useCallback" 提到外面去就好了,报错是因为这样写在 "map" 循环里面 "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/5a3ffe4082645695b1364e355c470bfa.png) "image.png" (https://wmprod.oss-cn-shanghai.aliyuncs.com/c/user/20241014/56ccca70c29f55a7c77d1d97deb06253.png) 当然还可以使用其他方案 * 比如 "ahooks" 里面的 "useMemoizedFn",是之前 "React" 官方 "useEvent" 提案的实现,函数引用始终不会变,并且不会产生过期闭包,无需依赖项 "https://ahooks.js.org/zh-CN/hooks/use-memoized-fn" (https://link.segmentfault.com/?enc=e%2BSRrOtxLoUQrKRfmXrlGg%3D%3D.jhLSBNbsEimftM%2FB5G7PmgnE%2FGdJpyk5jSqkZIccto%2Fs0lApxTNcsOmOpt%2FD%2Ft4sKkvTcQZ1%2Fsd8LAJkL%2ByMIg%3D%3D)