如何获取中间组件's实例将其函数传递给reactjs中的子实例
How get middle component's instance to pass its function to child in reactjs?
如果我有一个组件:
var OuterComponent = React.createClass( {
render: function() {
return (
<div>
<MiddleComponent>
<Child parentFunctionShouldBe={this.middleComponentFunction} />
</MiddleComponent>
</div>
);
}
});
如何传递位于中间组件中的函数?问题是this
指的是OuterComponent
,而不是MiddleComponent
。我不希望它是一个静态函数,而是一个实例函数。
另一个选项是使用高阶组件(HoC)。如果MiddleComponent
主要为Child
添加标记或功能,那么这是一个不错的选择。
var MiddleComponent = function (Wrapped) {
var Component = React.createClass({
middleComponentFunction: function () {},
render: function () {
return (
<Wrapped {...this.props} parentFunctionShouldBe={this.middleComponentFunction} />
);
}
});
return Component;
}
var WrappedChild = MiddleComponent(Child);
var OuterComponent = React.createClass( {
render: function() {
return (
<div>
<WrappedChild passToChild="value" />
</div>
);
}
});
此外,如果要将MiddleComponent
与其他类型的组件一起使用,则可以自定义集成的发生方式。
var MiddleComponent = function (config, Wrapped) {
var prop = config.prop || 'parentFunctionShouldBe';
var Component = React.createClass({
middleComponentFunction: function () {},
render: function () {
var extraProps = {};
extraProps[prop] = this.middleComponentFunction;
return <Wrapped {...this.props} {...extraProps} />;
}
});
return Component;
}
// same result as above but configurable for other use cases
var WrappedChild = MiddleComponent({prop: 'parentFunctionShouldBe'}, Child);
var OuterComponent = React.createClass( {
render: function() {
return (
<div>
<WrappedChild passToChild="value" />
</div>
);
}
});
您可以向组件添加ref,并从this.refs.componentRef
:调用该方法
var OuterComponent = React.createClass( {
callMethod: function() {
this.refs.middleComponent.middleComponentFunction();
},
render: function() {
return (
<div>
<MiddleComponent ref="middleComponent">
<Child parentFunctionShouldBe={this.callMethod} />
</MiddleComponent>
</div>
);
}
});
您可以执行类似的操作
var OuterComponent = React.createClass( {
render: function() {
return (
<div>
<MiddleComponent>
<Child />
</MiddleComponent>
</div>
);
}
});
var MiddleComponent = React.createClass({
propTypes: {
children: React.PropTypes.element.isRequired
},
render: function() {
return (
<div>
{React.cloneElement(this.props.children, {parentFunctionShouldBe: this.middleComponentFunction})}
</div>
)
},
middleComponentFunction: function() {
...
}
});
相关文章:
- ES6构造函数返回基类的实例
- Mongoose TypeError:实例化模式类型的对象时,对象不是函数
- 如何用javascript调用函数,然后在滚动事件中调用该函数的特定实例
- google在类内映射javascript directionsService.route请求:将类实例传递给回调函数
- 如何在事件函数中访问窗口实例
- Javascript:只有在代码中使用单个实例时,函数才能正常工作
- 调用函数和创建函数实例之间的Javascript差异
- setTimeout是否创建函数实例
- 在 JavaScript 中,当我们实例化派生对象时,原型的函数隐藏在哪里
- 挖空视图模型函数仅影响最后一个实例
- 在数组中的每个对象上调用实例函数
- 从 $scope 上的函数访问控制器内的实例函数
- 实例函数变量不会更改
- 如何在angularjs中获取实例函数
- Javascript——如何在不使用新运算符的情况下启用静态方法,同时防止使用实例函数
- 如何将实例函数传递给外部函数
- 如何比较两个不同的javascript对象相同的属性(不比较实例函数)
- 使用WinJS构造函数中的实例函数
- 使用tcomb,是我遗漏了什么,还是无法定义实例函数
- 使用jQuery时可以调用实例函数吗?