本文介绍通过 React.memo 优化子组件渲染行为的核心方法,解决父组件状态变化导致子组件不必要的重复渲染问题,确保子组件仅在真正相关的 props 改变时更新。
本文介绍通过 `react.memo` 优化子组件渲染行为的核心方法,解决父组件状态变化导致子组件不必要的重复渲染问题,确保子组件仅在真正相关的 props 改变时更新。
在 React 函数组件中,父组件状态(state)更新会触发其自身重渲染,并默认导致所有子组件同步重渲染——即使子组件接收的 props 实际未发生变化。这种行为虽符合 React 的默认协调机制,但在性能敏感场景(如高频状态更新、复杂子组件或列表渲染)下可能造成明显开销。
最直接且高效的解决方案是使用 React.memo 对子组件进行浅层 props 比较的 memoization:
const Child = React.memo(({ value }) => {
useEffect(() => {
console.log('Child mounted or value changed');
// 可选:向父组件派发状态变更(例如通过回调)
}, [value]);
return <div>{value}</div>;
});
React.memo 会自动对前后两次 props 进行浅比较(shallow comparison)。若 value 未发生引用或值的变化(如基本类型相等、对象/数组引用未变),则跳过本次渲染,复用上一次的渲染结果。
Orderly React SDK 钩子使用参考指南,包括 useOrderEntry、usePositionStream、useOrderbookStream、useCollateral 等。
⚠️ 注意事项:
- React.memo 仅对比 props,不处理 state 或 context 变化引起的内部重渲染;
- 若父组件向子组件传递内联函数(如 onClick={() => setValue(v => v + 1)})或临时对象(如 style={{ color: 'red' }}),每次父组件渲染都会生成新引用,导致 React.memo 失效。此时需配合 useCallback 和 useMemo 提升稳定性:
const handleClick = useCallback(() => setValue(v => v + 1), [setValue]); const style = useMemo(() => ({ color: 'red' }), []); - 对于深层嵌套对象或自定义比较逻辑,可传入第二个参数 areEqual 自定义比对函数:
const Child = React.memo(({ value, config }) => { /* ... */ }, (prevProps, nextProps) => prevProps.value === nextProps.value && prevProps.config.id === nextProps.config.id );
✅ 总结:React.memo 是防止子组件“被动重渲染”的基础且必要手段;它不改变数据流,而是增强渲染决策的智能性。结合 useCallback、useMemo 使用,可构建高响应性、低冗余的 React 组件体系。










