为什么我不能从ReactJS中的"外部"访问组件方法?为什么不可能,有什么办法可以解决?

考虑代码:

var Parent = React.createClass({
    render: function() {
        var child = <Child />;
        return (
            <div>
                {child.someMethod()} // expect "bar", got a "not a function" error.
            </div>
        );
    }
});

var Child = React.createClass({
    render: function() {
        return (
            <div>
                foo
            </div>
        );
    },
    someMethod: function() {
        return 'bar';
    }
});

React.renderComponent(<Parent />, document.body);

推荐答案

React为您试图通过ref attribute执行的操作提供了一个接口.将组件分配为ref,其current属性将是您的自定义组件:

class Parent extends React.Class {
    constructor(props) {
        this._child = React.createRef();
    }

    componentDidMount() {
        console.log(this._child.current.someMethod()); // Prints 'bar'
    }

    render() {
        return (
            <div>
                <Child ref={this._child} />
            </div>
        );
    }
}

Note:根据这里的文档,这只在子组件声明为类时有效:https://facebook.github.io/react/docs/refs-and-the-dom.html#adding-a-ref-to-a-class-component

Update 2019-04-01: Changed example to use a class and 100 per latest React docs.

Update 2016-09-19: Changed example to use ref callback per guidance from 100 docs.

Javascript相关问答推荐

容器如何更改默认插槽中子项的显示?

可以的.是否可以在不预编译的情况下使用嵌套 Select 器?

如何最好地从TypScript中的enum获取值

模块与独立组件

fs. writeFile()vs fs.writeFile()vs fs.appendFile()

Chart.js V4切换图表中的每个条,同时每个条下有不同的标签.怎么做?

jQuery s data()[storage object]在vanilla JavaScript中?'

将本机导航路由react 到导航栏中未列出的屏幕?

MathJax可以导入本地HTML文档使用的JS文件吗?

在open shadow—root中匹配时,使用jQuery删除一个封闭的div类

Jest toHaveBeenNthCalledWith返回当前设置的变量值,而不是调用时的值

如何为仅有数据可用的点显示X轴标签?

如何在Jest中模拟函数

如何在下一个js中更改每个标记APEXCHARTS图表的 colored颜色

谷歌饼图3D切片

TypeORM QueryBuilder限制联接到一条记录

Refine.dev从不同的表取多条记录

如何阻止外部脚本进入顶层导航

由于http.get,*ngIf的延迟很大

验证Java脚本函数中的两个变量