在 React.js 中提升性能,通常可以从渲染控制、组件设计、状态管理、列表优化、构建与加载几个层面入手。下面按实用程度总结常见且有效的方式:
React.memo避免父组件更新导致子组件无谓渲染(仅对 props 做浅比较)。
const Child = React.memo(function Child({ value }) {
return <div>{value}</div>;
});
useMemo / useCallback缓存计算结果和函数引用,防止子组件因函数变化而重渲染。
const memoValue = useMemo(() => heavyCompute(), [dep]);
const handleClick = useCallback(() => {}, [dep]);
把“频繁变化”和“稳定”的部分拆开,避免一大块 UI 一起重渲染。
key(且不要用 index)错误的 key 会导致 DOM 复用错误,性能下降。
{list.map(item => (
<li key={item.id}>{item.name}</li>
))}
数据量大时用:
react-windowreact-virtualized只渲染可视区域 DOM。
不要把所有状态放最顶层,能用 useState 就别用全局。
useState / useReducerzustand / redux / jotai// ❌
function App() {
const data = heavyCompute();
return <div>{data}</div>;
}
// ✅
const data = useMemo(() => heavyCompute(), []);
// ❌
<Child style={{ color: 'red' }} onClick={() => {}} />
// ✅
const style = useMemo(() => ({ color: 'red' }), []);
const onClick = useCallback(() => {}, []);
React 18+ 并发特性startTransitionuseDeferredValue让非紧急更新不阻塞 UI。
const deferred = useDeferredValue(value);
const Page = React.lazy(() => import('./Page'));
配合 Suspense 使用。
npm run build
避免开发模式运行生产项目。
why-did-you-render如果你愿意,我可以:
你可以直接贴代码或说使用场景。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。