【发布时间】:2018-08-31 09:36:54
【问题描述】:
我有一个为弹出窗口构建的 React 组件。 PopupContent 将接收一个 DOM 元素或另一个 React 组件作为子元素。
class PopupContent extends React.Component {
render() {
return(
<div>
{React.cloneElement(this.props.children, {closePopup:this.props.closePopup})}
</div>
);
}
}
closePopup 属性设置一个标志来显示/隐藏弹出窗口
closePopup(event){
event.preventDefault();
this.setState({
popupInView: false
})
}
将closePopup 传递给子组件的原因是关闭子组件的弹出窗口。
如果子组件是自定义 React 组件,则此设置效果很好:
<PopupContent>
<ContentOfThePopup />
</PopupContent>
但如果子元素是 DOM 元素,我会得到 Unknown Prop Warning。
警告:React 无法识别 DOM 上的
closePopup属性 元素。
<PopupContent>
<div>Content Of The Popup </div>
</PopupContent>
我可以使用here 解释的技术来区分 DOM 元素和 React 组件。但我想咨询社区是否有更好的方法
【问题讨论】:
-
这个工作
{React.cloneElement(this.props.children, ...this.props)}吗? -
你为什么要
preventDefault?只有使用 dom 识别的事件名称才能接收事件。 -
@Bhojendra Rauniyar 它可以工作,但是
closePopup不会作为道具传递给子元素。 -
@Daniel Lizik 假设我在
PopupContent中有一个<a href="#">Close</>来关闭它。您的观点已被采纳,没有必要(或可能导致问题)。但我遇到的问题与此无关 -
closePopup 函数需要传递给子元素以便执行它,这需要您的子元素是一个 React 组件。在这种情况下,您需要确保子组件是 React 组件
标签: javascript reactjs ecmascript-6