代码大致逻辑如下, const b 基于 a 生成(实际上 a 是通过 props 传进来的),并传递给组件 Child.
根据输出可以注意到子组件 Child 被调用了两次.
怎么做才能避免 Child 不必要二次更新呢?
function createB(a) {
return { a };
}
export default function Index() {
const [a, setA] = useState(0);
const [b, setB] = useState(createB(a));
useEffect(() => {
console.log('b', b);
setB(createB(a));
}, [a]);
return <Child b={b}></Child>;
}
function Child(props) {
const b = props.b;
useEffect(() => {
console.log('child b', b);
}, [b]);
return <div>{b.a}</div>;
}
输出
child b {a: 0}
b {a: 0}
child b {a: 0}
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.