假设我有一个组件,其中包含将PUT请求发送到后端的功能。通常,这些请求是由用户直接与此组件交互触发的。我们称之为Child
。
我的UI的不同部分包含在父组件中呈现的这些元素的集合。让我们调用这个新容器Parent
。
我希望Parent
在Child
组件集合旁边显示一个公共按钮,让我的用户一次性触发所有Child
元素的PUT请求。
目前,我保存每个Child
元素的引用,因为我在Parent
中呈现每个元素。当用户单击Parent
中呈现的公共按钮时,我Parent
遍历每个ref并调用触发PUT请求的每个Child
中的函数。还有更好的方法吗?
答案 0 :(得分:0)
是的,还有更好的方法。您应该lift your state up到最近的需要访问它的共同祖先。在这种情况下,您需要在Child
内访问每个Parent
中的数据。您正在尝试太难使儿童完全独立于与其容器断开连接的实体。
相反,我建议您重新考虑应用的结构,以便数据位于Parent
或其他祖先内部state
,并且祖先只是将其传递给每个Child
} props
用于渲染。执行PUT
请求的函数也可以选择存在于祖先内部并使用回调进行处理,或者 - 根据需要在该回调中发生或不发生的反馈 - 只需要实用程序函数或服务这是跨组件共享的。
编辑:这是React的核心概念之一,被称为“自上而下的数据流”。 From the React docs:
对于在React应用程序中发生变化的任何数据,应该只有一个“真实来源”。通常,首先将状态添加到需要渲染的组件中。然后,如果其他组件也需要它,您可以将它提升到最近的共同祖先。您应该依赖自上而下的数据流,而不是尝试在不同组件之间同步状态。