面试题答案
一键面试- 方法描述:
- 可以使用
React.memo
对Provider
组件进行包裹。React.memo
是一个高阶组件,它会对函数式组件进行浅比较,如果组件的 props 没有变化,就不会重新渲染该组件,从而避免不必要的Provider
更新,进而减少Consumer
组件因Provider
更新而导致的重新渲染。
- 可以使用
- 代码示例:
- 首先创建一个
Context
:
- 首先创建一个
import React, { createContext, useState } from'react';
const MyContext = createContext();
const MyProvider = React.memo(({ children }) => {
const [data, setData] = useState({ value: 0 });
return (
<MyContext.Provider value={data}>
{children}
</MyContext.Provider>
);
});
const MyConsumer = () => {
const contextData = React.useContext(MyContext);
return (
<div>
<p>Value from context: {contextData.value}</p>
</div>
);
};
const App = () => {
return (
<MyProvider>
<MyConsumer />
</MyProvider>
);
};
export default App;
在上述代码中,MyProvider
被 React.memo
包裹,只有当 MyProvider
的 props
发生变化时,它才会重新渲染。这里 MyProvider
没有接收额外的 props
,所以只有 data
状态发生变化时才会触发更新,这样就能避免不必要的更新传递给 Consumer
组件,优化了性能。