繁体   English   中英

ReactJS-孩子如何找到其父母?

[英]ReactJS - How can a child find its parent?

在ReactJS中,有没有一种方法可以让组件找出其父对象是谁?

编辑1:不管这样做有什么优点,有没有办法?

我还没有找到一种执行此操作的React方法-从我的看到,想法是将回调从父级传递给子级,然后子级调用该回调-并未意识到该回调实际上位于父母

我尝试设置一个“所有者”属性,这种想法似乎行得通,但是我不知道最好的方法是什么?

例如

<Parent>
  <Child owner={this}/>
</Parent>

然后在子组件中,我可以执行owner.method ,并且看起来工作正常。 我知道这不是真正的父母/孩子关系,但是这是我在测试中发现的最接近的关系。

有人可能会说回调是一种更干净的方法,但是在某些情况下,父/子关系(例如RadioButtonGroup和RadioButton)看起来很自然,并且我认为了解这种关系会有所帮助。

编辑2:因此不可能吗?

我不喜欢不支持HTML的想法是,HTML可以用零个javascript标记-它暗示了默认功能-某些元素必须具有父级-它们被定义为其他元素的子级(例如ul和li)。 这不能在JSX发生,因为如果有要素之间的相互作用-必须 JavaScript事件是绑定组件一起-你使用它们每一次。 设计人员不能简单地编写类似语法的HTML-有人必须介入并在其中放置一些javascript绑定-这样会使维护工作变得更加困难。 我认为该想法对于覆盖默认行为是有意义的,但是应该支持默认行为。 违约将需要了解您的父母或所有者。

不这样做有很多好处,主要的两个是:可重用性和封装性。

TL; DR您可能永远不想这样做。

假设我们的RadioButton具有以下公共接口:

<RadioButton active={true} onSelect={function(event){}}>text</RadioButton>

我们可以构造另一个名为SuperRadioButton的组件,该组件可能具有不同的表示方式,但仍具有与RadioButton相同的公共api,因此它是RadioButtonGroup的有效子代。

如果我们正在访问父级,那么父级的内部将成为这些组件的公共api的一部分,并且我们需要更加谨慎地更改代码,因为任何这些组件的更改都可能导致整个应用程序打破。

回调。 所有者属性。 将事件传递出去,以被树中的根捕获。 通过上下文传递根源。

有很多方法,是的,但是它们与反应的概念模型相反,后者始终始终是自上而下的。 简短的版本是“可以,但是不能。”

根本的问题是您不希望孩子在父母的知识之外进行变异。

这意味着唯一的例外是组件树的根,因此在属性或上下文中向下传递该控件的成员,然后通过告诉根“向上传递”,这是半合法的,然后可以重新绘制自身。

应用程序层Flux所做的并非与此完全不同,但是将整个组件层次结构之外的内容完全传递给了一个dataStore,后者将事件随事件广播回去。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM