当前位置: 首页 > 面试题库 >

有什么方法可以在React中访问父组件实例?

姜宏放
2023-03-14
问题内容

我知道这不是一种能够this.parent在React组件中执行类似操作的功能方法,而且我似乎无法在React组件实例上找到任何导致父级的属性,但是我只是希望能够在需要的地方做一些自定义的事情。

在任何人浪费时间解释这不是功能性的React“方法”之前,请理解我需要这样做,因为我正在尝试实现以下目标:

为Meteor的Spacebars模板引擎构建一个Transpiler,该引擎的渲染模型确实考虑了父组件/模板。

我已经构建了一个编译器,可以修改输出jsx来实现此目的。我通过传入parent={this}所有组成的子组件来实现。但是,在我想到这一事实之后,也许我只是根本不了解某些东西,这些东西将使我能够
无需其他转译修改 即可访问父组件实例。

任何提示将不胜感激。


问题答案:

React 0.13及更高版本的更新

Component._owner已在React
0.13中弃用,并且在中_currentElement不再作为键存在this._reactInternalInstance。因此,使用下面的解决方案throws
Uncaught TypeError: Cannot read property '_owner' of undefined

从React 16开始,替代方案是this._reactInternalFiber._debugOwner.stateNode

您已经认识到这几乎总是一件不好的事情,但是对于那些不太了解这个问题的人,我在这里要重复一遍: 这通常是在React中完成事情的不正确方法。

公共 API中没有任何东西可以让您获得想要的东西。您可能可以使用React内部实现此目的,但是由于它是私有API,因此 随时 可能会中断

我再说一遍:您几乎应该肯定不应该在任何生产代码中使用它。

也就是说,您可以使用来获取当前组件的内部实例this. _reactInternalInstance。在此处,您可以通过_currentElement属性访问元素,然后通过访问 所有者
实例_owner._instance

这是一个例子:

var Parent = React.createClass({
  render() {
      return <Child v="test" />;
  },

  doAThing() {
    console.log("I'm the parent, doing a thing.", this.props.testing);
  }
});

var Child = React.createClass({
  render() {
    return <button onClick={this.onClick}>{this.props.v}</button>
  },

  onClick() {
    var parent = this._reactInternalInstance._currentElement._owner._instance;
    console.log("parent:", parent);
    parent.doAThing();
  }
});

ReactDOM.render(<Parent testing={true} />, container);

这是一个有效的JSFiddle示例:http
:
//jsfiddle.net/BinaryMuse/j8uaq85e/



 类似资料:
  • 本文向大家介绍在子组件中怎么访问到父组件的实例?相关面试题,主要包含被问及在子组件中怎么访问到父组件的实例?时的应答技巧和注意事项,需要的朋友参考一下 通过

  • 本文向大家介绍react中可以在render访问refs吗?为什么?相关面试题,主要包含被问及react中可以在render访问refs吗?为什么?时的应答技巧和注意事项,需要的朋友参考一下 不可以,render 阶段 DOM 还没有生成,无法获取 DOM。DOM 的获取需要在 pre-commit 阶段和 commit 阶段

  • 我希望除了和之外的螺栓可能超出树的范围。 文档http://storm.apache.org/documentation/probureing-message-processing.html没有显示任何关于此问题的内容。这是一个有效的场景,还是从喷口启动ack是使ack工作的唯一方法?

  • 我在react native中有一个搜索栏组件,它在父组件中导入, SearchBar子组件具有以下元素: 是否可以访问此子组件在其中导入的父组件中的状态?提前感谢你的帮助

  • 我倾向于使用react功能组件和钩子,因为我对react没有太多经验。我想在父功能组件中使用react dual listbox类组件。在这个父组件中,我希望能够访问子类组件的状态。最好的方法是什么? 来自https://github.com/jakezatecky/react-dual-listbox的子响应双列表框组件 包含在标准功能组件中 例如,是否可能在父组件中有一个钩子,该钩子会根据du

  • 本文向大家介绍如何在子组件中访问父组件的实例?相关面试题,主要包含被问及如何在子组件中访问父组件的实例?时的应答技巧和注意事项,需要的朋友参考一下 vue中如果父组件想调用子组件的方法,可以在子组件中加上ref,然后通过this.$refs.ref.method调用(https://www.cnblogs.com/jin-zhe/p/9523029.html) Vue中子组件调用父组件的方法,这里