Javascript ReactJS-孩子如何找到自己的父母?

Javascript ReactJS-孩子如何找到自己的父母?,javascript,facebook,reactjs,Javascript,Facebook,Reactjs,在ReactJS中是否有一种方法可以让组件找出它的父组件是谁? 编辑1:不管这样做有什么好处,有没有办法? 我还没有找到一种方法来实现这一点——从我所看到的,这个想法是将回调从父级传递给子级,子级调用回调——而不知道回调实际上在父级上 我试着设置一个“业主”财产,这个想法似乎有效,但我想知道最好的方法是什么 e、 g 然后在子组件中,我可以执行owner.method,它似乎工作得很好。我知道这不是真正的父母/孩子关系,但这是我在测试中发现的最亲密的关系 有人可能会说回调是一种更干净的方法,

在ReactJS中是否有一种方法可以让组件找出它的父组件是谁?

编辑1:不管这样做有什么好处,有没有办法? 我还没有找到一种方法来实现这一点——从我所看到的,这个想法是将回调从父级传递给子级,子级调用回调——而不知道回调实际上在父级上

我试着设置一个“业主”财产,这个想法似乎有效,但我想知道最好的方法是什么

e、 g


然后在子组件中,我可以执行
owner.method
,它似乎工作得很好。我知道这不是真正的父母/孩子关系,但这是我在测试中发现的最亲密的关系

有人可能会说回调是一种更干净的方法,但在我看来,某些事情(例如RadioButtonGroup和RadioButton)的父/子关系似乎是自然的,并且会从了解这种关系中受益

编辑2:所以这是不可能的? 我不喜欢它不被支持的观点是 HTML可以用零javascript标记——这意味着, 默认功能-某些元素需要有父元素- 它们被定义为其他元素(如ul和li)的子元素。这 不能在JSX中发生,因为如果 元素-必须有绑定 组件在一起-每次使用它们时。设计师不能 只需编写类似HTML的语法-必须有人介入并输入一些 javascript绑定在那里-然后进行维护 更努力。我认为这个想法有助于克服违约行为, 但是应该支持默认行为。而违约也会 需要知道你的父母,或者你的主人是谁


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

TL;博士,你可能永远都不想这么做。 假设我们的单选按钮具有以下公共界面:

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


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

回调。业主财产。传递事件以被树中的根捕获。通过上下文传递根

是的,有一些方法,但它们与react的概念模型相反,react的概念模型在任何时候都要明确地自上而下。简短的版本是“你可以,但不要。”

根本的问题是,你不希望孩子在父母不知情的情况下发生变异

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


应用层流量的作用与此类似,但它将组件继承权之外的内容完全传递给数据存储,数据存储用事件将内容广播回来。

嘿。。。谢谢你的反馈!我确实理解这一点的优点/缺点,并且愿意在每次我想做这类事情时构建定制复合材料,这缓解了主要的担忧——因此我认为最初的问题仍然存在——是否有一种干净的方法来获得组件父级?没有比您目前已有的更好的方法了。“有人说要揭露一个业主的财产,但我不确定这是否会发生。”布拉德帕克斯:我同意法克伦的看法。如果您发现自己处于需要访问父组件的情况下,那么您很可能正在使用反模式,或者需要改进应用程序设计。将回调作为道具公开通常是组件之间交互的方式。“有一些关于公开所有者属性的讨论。”我没听说过这方面的任何讨论。所以。。。。我想那是没有办法的,对吧;-)除了我已经在做的事情之外?谢谢你的反馈-我不希望我的孩子在父母的知识之外发生变异-我只是希望我的孩子能够通知父母它应该变异它的状态-即父母的状态-然后传递给孩子。当然,我可以通过回调实现这一点,但我的类似HTML的JSX是带有javascript的HTML,而不像HTML那样。。。如果我的孩子可以打电话给父母。选择child(childIndex),那么我就可以自动做出“反应”
<Parent>
  <Child owner={this}/>
</Parent>