Antd Popover组件内选中后自动收起

405 阅读1分钟

背景:

当我们点击设置按钮时,会通过Antd的Popover 组件弹出一个选择表单。表单内包含Select CheckBox 组件,当我们通过Select 下拉框选择完毕后,Popover 会自动收起。

Pasted image 20240918192556.png

疑问:为什么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里面,从而选中时不会进行关闭

Pasted image 20240918194444的副本.png

 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;
  },

github.com/fis-compone…