如题,主要是要考察下你对 react 的掌握程度,那么这个题回答的好,一定是加分的。
1、减少计算的量
1)列表项使用 key 属性
2)对于Commit在执行hooks时,开发者应保证hooks中的代码尽量轻量,避免耗时阻塞,同时应避免在 CDM、CDU周期 中更新组件
3) 将多个 State 合并为单个 State。例如useState({ list: null, info: null })替代 list 和 info 两个 State。
4)使用 React 官方提供的 unstable_batchedUpdates 方法,将多次 setState 封装到 unstable_batchedUpdates 回调中
2、利用缓存
使用 useMemo 和 useCallback 来生成稳定值,并结合 PureComponent 或 React.memo 避免子组件重新 Render
3、精确重新计算的范围
1)给子组件传props的时候一定只传其需要的而并非一股脑全部传入
2)实现优先级更新,将耗时任务移动到下一个宏任务中执行,优先响应用户行为。
3)避免在 didMount、didUpdate 中更新组件 State
4、其他优化
1)懒加载
Webpack 的动态导入和React.lazy方法
- 懒渲染
判断组件是否出现在可视区域内借助react-visibility-observer依赖
3)虚拟列表
react-window 是 react-virtualized 的轻量版本,其 API 和文档更加友好。推荐使用 react-window,只需要计算每项的高度即可