在 React.js 中,性能优化的核心目标是:减少不必要的渲染、降低计算成本、提升交互流畅度。下面从 原理 → 常用手段 → 进阶方案 系统讲一下。
React 性能问题的根源通常是:
React 的渲染流程:
state/props 变化 → 虚拟 DOM diff → 更新真实 DOM
React.memo(函数组件)避免父组件更新导致子组件无谓渲染。
const Child = React.memo(function Child({ value }) {
return <div>{value}</div>;
});
✅ 适用于:
⚠️ 注意:
useMemo 缓存计算结果避免重复计算。
const total = useMemo(() => {
return list.reduce((a, b) => a + b, 0);
}, [list]);
✅ 适用于:
useCallback 缓存函数避免函数引用变化导致子组件 re-render。
const handleClick = useCallback(() => {
console.log('click');
}, []);
✅ 配合 React.memo 使用效果最好
❌ 错误示例:
<Child style={{ color: 'red' }} onClick={() => {}} />
✅ 优化方式:
const style = { color: 'red' };
const onClick = () => {};
key 正确使用list.map(item => <Item key={item.id} />)
❌ 不要使用 index 作为 key(列表变动时性能差)
大组件 → 小组件
<Form />
<Table />
<Chart />
好处:
shouldComponentUpdate(类组件)shouldComponentUpdate(nextProps) {
return nextProps.value !== this.props.value;
}
(函数组件用 React.memo 替代)
const Chart = React.lazy(() => import('./Chart'));
配合:
<Suspense fallback={<Loading />}>
<Chart />
</Suspense>
✅ 减少首屏体积
❌ 错误:
const [count, setCount] = useState(0); // 放在顶层
✅ 优化:
zustand / jotai / redux selectorconst count = useSelector(state => state.count);
避免整个 store 变化导致组件更新。
✅ 推荐库:
react-windowreact-virtualized<FixedSizeList height={400} itemCount={1000} itemSize={35}>
{Row}
</FixedSizeList>
const onChange = debounce(handleChange, 300);
import { startTransition } from 'react';
startTransition(() => {
setSearchQuery(value);
});
✅ 非紧急更新不阻塞 UI
render 中发请求useEffectReact 性能优化 = 减少 re-render + 减少计算 + 延迟加载
如果你愿意,我可以:
你现在用的是 函数组件还是类组件?React 版本是多少?
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。