React 0.13 及更新版本的更新
Component._owner
在 React 0.13 中被弃用,并且_currentElement
不再作为this._reactInternalInstance
. 因此,使用下面的解决方案会抛出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/