Sud*_*mar 3 javascript ecmascript-6 reactjs react-native
我有带有多个子组件的父组件。从api获取数据后,会传递不同类型的数据给子组件。一些组件将获取对象作为道具。我试图避免该组件中的重新渲染。即使数据相同,它也会重新渲染。我怎样才能避免这种重新渲染?
const Parent = () => {
const [childData, setChildData] = useState(null);
useEffect(() => {
const data = getChildData();
setChildData(data);
}, [])
return (
<Child data={childData}/>
);
};
const Child = React.memo((props) => {
const {name, email} = props.data;
return (
<div>
<p>Name: {name}</p>
<p>Email: {email}</p>
</div>
);
});
Run Code Online (Sandbox Code Playgroud)
小智 7
根据 React 官方文档,默认情况下 React 只会浅层比较 props 对象中的复杂对象。如果您想控制比较,还可以提供自定义比较函数作为第二个参数。https://reactjs.org/docs/react-api.html#reactmemo。这是一个例子。
const Parent = () => {
const [childData, setChildData] = useState(null);
useEffect(() => {
const data = getChildData();
setChildData(data);
}, [])
return (
<Child data={childData} />
);
};
function areEqual(prevProps, nextProps) {
return prevProps.name == nextProps.name && prevProps.email == nextProps.email;
}
const Child = React.memo((props) => {
const { name, email } = props.data;
return (
<div>
<p>Name: {name}</p>
<p>Email: {email}</p>
</div>
);
}, areEqual);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3646 次 |
| 最近记录: |