关于 React Hook 的问题, 如何避免子组件不必要的更新?

2022-05-20 20:50:53 +08:00
 rabbbit

代码大致逻辑如下, 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}
559 次点击
所在节点    问与答
3 条回复
aaronlam
2022-05-20 21:11:39 +08:00
React.memo 一下 Child 组件
rabbbit
2022-05-20 21:20:24 +08:00
问题描述有点问题, 改一下应该是:

怎样才能避免 Index 没必要的二次调用 createB(a) ?
createB 返回的是个树形结构,开销还蛮大的.
fayetitus
2022-05-20 21:21:59 +08:00
@rabbbit 你需要 useMemo

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/854260

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX