背景:
当我们点击设置按钮时,会通过Antd的Popover
组件弹出一个选择表单。表单内包含Select
CheckBox
组件,当我们通过Select
下拉框选择完毕后,Popover
会自动收起。
疑问:为什么Popover会自动收起???
冲突:
不希望选中Select
下拉框后会自动收起,而是点击Popover其他区域时,才会自动收起
解决方案:
需要给Select
组件加上getPopupContainer={triggerNode => triggerNode.parentNode}
<Select
getPopupContainer={triggerNode => triggerNode.parentNode}
value={globalSettings.language}
onChange={changeLanguage}
>
<Option value="en">English</Option>
<Option value="zh">中文</Option>
</Select>
原因
Popover挂载的节点默认是在body下面,点击Select后获取的下拉框,同样也是挂载在body下面的 当我们点击Select进行选中时,就相当于点击了Popover的外部区域,这样Popover就会自动收起
当我们使用getPopupContainer={triggerNode => triggerNode.parentNode}
后,下拉框就会在Popover里面,从而选中时不会进行关闭
getPopupContainer: function getPopupContainer() {
if (!this.popupContainer) {
this.popupContainer = document.createElement('div');
if (this.props.getPopupContainer) {
var mountNode = this.props.getPopupContainer((0, _reactDom.findDOMNode)(this));
mountNode.appendChild(this.popupContainer);
} else {
document.body.appendChild(this.popupContainer);
}
}
return this.popupContainer;
},