reactjs - 使用 useEffect 监听子组件可以吗?

我有一个重新定位组件的画廊。我希望它在更改子组件时重新定位组件:添加、切换。

我正在听 children 使用 useEffect 钩子(Hook):

useEffect(() => {
    items = [...layout.current.childNodes].filter(
      (el) => el.nodeType === 1 && +getComputedStyle(el).gridColumnEnd !== -1,
    );
    console.log('>>> Gallery: children changed!', children.props.items);
    setLayout();
  }, [children]);

至于父我有以下布局:

<Gallery>
      <Cards items={pageGalleryItems} />
</Gallery>

Cards 组件显示一些项目信息,如价格、名称。我注意到,当我更改设置以显示不同的货币时,我希望卡片显示不同的货币,仅此而已,但画廊认为我的子节点已更改并重新定位所有元素。这让我怀疑使用 useEffect 监听子组件是否合适?或者如何监听子节点被正确更改:替换、添加?

最佳答案

useEffect 在第一次渲染以及状态/ Prop 更改时触发。

因此,如果您希望检测子组件的变化,请尝试使用一种通过 Prop 提供 child 内容的状态。

一旦你的 useEffect 被触发,一个新的渲染被创建并且 children 从修改后的状态接收他们的新内容。

我建议您熟悉 lifting-up states 的概念

https://stackoverflow.com/questions/71601225/

相关文章:

nestjs - 导出 NestJs 模块与导出提供程序

css - 如何简化这些 CSS 选择器?

c - 如何在不调用未定义行为的情况下检查值是否适合类型?

machine-learning - 如何使用 mlflow REST api 记录模型? mlfl

swift - AVPlayer 在 iOS 15.4 中寻求 completionHandler

sql-server - GORM GOLANG/Go msSQL UNIQUEIDENTIFIER

android - 无法连接到 frida 服务器 : need Gadget to attach

c# - 检测持续时间值列表中的闪烁

amazon-web-services - 远程连接/SSH 到已部署的 AWS AppRunner

ethereum - 在智能合约中使用 _hashTypedDataV4 并在前端使用 _signT