![](/img/trans.png)
[英]When using react-router, is there a different way to pass props from a stateful component to a stateless one
[英]React clone component (stateless or stateful) to pass additional props
我想克隆/扩展一个React组件(不知道它是有状态的还是无状态的)并传递它的道具:
const Foo = (props) => {
return (
<div>foo</div>
);
}
class Bar extends React.Component {
render() {
return (
<div>bar</div>
)
}
}
问题是,应该对Foo
和Bar
这两个变量进行不同的处理:
const FooExtended = (props, context) => {
return Foo(_.extend(props, additionalProps), context);
}
class BarExtended extends Bar {
constructor(props, context) {
super(_.extend(props, additionalProps), context);
}
}
没有简单的方法来知道变量Component
是Stateless还是Statefull,而无需进行骇人的toString
regex测试。
React.cloneElement/createElement
在这些失败,给我以下错误:
React.createElement:类型无效-预期为字符串(对于内置组件)或类/函数(对于复合组件),但得到了:对象。 您可能忘记了从定义文件中导出组件。
那么,有什么简单的方法可以只做cloneComponent(originalComponent, additionalProps)
吗?
没有简单的方法来知道变量Component是无状态还是有状态[...]
而且我认为这是为什么需要extend React.Component
的原因之一,以便更容易地区分两者。 因为React本身必须能够区分它们,因为如果没有new
则无法实例化es class
。
您可以执行以下操作:
function cloneComponent(originalComponent, additionalProps) { if (originalComponent.prototype instanceof React.Component) { return class extends originalComponent { constructor(props, context) { super(_.extend(props, additionalProps), context); } }; } return (props, context) => { return originalComponent(_.extend(props, additionalProps), context); }; }
因为Foo.protoype instanceof React.Component
是true
。
但是 ,我认为更常见的做法是执行以下操作:
function addProps(Component, additionalProps) {
return props => <Component {...props} {...additionalProps} />;
}
这样就无需区分有状态组件和无状态组件。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.