React:将道具添加到现有组件

zoo*_*opz 33 javascript reactjs

我试图弄清楚如何使用其他道具克隆现有元素.

以供参考:

this.mainContent = <Hello message="Hello world!" />
Run Code Online (Sandbox Code Playgroud)

我试图做类似的事情

React.createElement(this.mainContent, Object.assign({}, 
   this.mainContent.props, { anotherMessage: "nice to meet ya!" }));
Run Code Online (Sandbox Code Playgroud)

但它不起作用.

我怎么做到这一点?

Sal*_*kar 52

你需要克隆元素并添加额外的道具,React.cloneElement例如:

var clonedElementWithMoreProps = React.cloneElement(
    this.mainContent, 
    { anotherMessage: "nice to meet ya!" }
);
// now render the new cloned element?
Run Code Online (Sandbox Code Playgroud)


Eug*_*yeu 18

如果您不想使用React.cloneElement(),可以使用以下代码段:

function AddExtraProps(Component, extraProps) {
    return <Component.type {...Component.props} {...extraProps} />;
}
Run Code Online (Sandbox Code Playgroud)

  • 请注意,这 ** 不保留 refs**。react.cloneElement 保留引用。[“这意味着,如果你得到一个带有 ref 的孩子,你不会意外地从你的祖先那里偷走它。你会得到相同的 ref 附加到你的新元素上。”](https://reactjs.org/ docs/react-api.html#react.cloneelement) (7认同)

jer*_*red 8

React.createElement() 将字符串或React类类型作为其第一个参数,因此如果您尝试克隆元素,则无法使用.

当然,还有React.cloneElement()代替,这确实的另一个深层副本阵营元素,可以选择提供新的道具.

var foo = React.cloneElement(this.mainContent, {anotherMessage: "nice to meet ya!"});
Run Code Online (Sandbox Code Playgroud)

应该管用.

  • 一分钟后发布:) (3认同)