![](/img/trans.png)
[英]Props are not passed with React.cloneElement in the render() method
[英]render simple HTML with react.cloneElement
React.cloneElement() 总是需要第一个参数作为反应组件,它应该作为道具中的子项传递。
有没有办法将一个简单的 HTML 节点作为子节点传递。 请参考下面的代码以更好地理解我的问题:
Dialog.jsx(通用组件):
return (
<div className="app-dialog-jsx" ref={(ele) => this.ele = ele}>
{this.state.show && React.cloneElement(this.props.children, {
contentStyle: {
height: 400,
overflowY: 'auto',
overflowX: 'hidden'
},
method1: this. method1,
method2: this. method2
})}
</div>
);
现在我不能通过:
<Dialog
ref={(dialog)=>this.dialog=dialog}
method1={()=>console.log(1)}
method2 ={()=>console.log(1)}
>
<h4>somethign</h4>
</Dialog>
H4 需要是一个 react 组件,否则它不会在 cloneElement 中设置 props。 我如何在这里发送简单的 HTML,有什么帮助吗?
详细说明为什么您的小提琴没有按预期工作。
请参阅此处的代码:
{this.props.show && React.cloneElement(this.props.children, {
contentStyle: {
color:'red'
}
})}
问题是在像CCC
这样的自定义组件的情况下, contentStyle
将作为道具传递,并且您正在像这样使用它:
style={this.props.contentStyle}
这意味着最终样式将应用于 div 而不是 contentStyle。 但是在div
情况下, contentStyle
将被应用并且不会改变任何东西,因为div
期望style
而不是contentStyle
。
为了解决您的问题,在所有地方将contentStyle
重命名为style
。
检查这个工作小提琴。
可以描述答案的最佳链接在这里:
如果您尝试使用 React 未识别为合法 DOM 属性/属性的 prop 来渲染 DOM 元素,则会触发 unknown-prop 警告。 你应该确保你的 DOM 元素没有浮动的虚假道具。
为了修复它,我们应该在渲染之前拆分道具。 喜欢:
render(){
const {children, addCustomProps, ...props} = this.props;
return(<div {...props}>{children}</div>);
}
为了避免警告,我们应该只将那些 props 传递给 DOM ,它们可以被识别为 HTML 属性或 React 属性,如 className。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.