【发布时间】:2021-08-12 06:50:48
【问题描述】:
我正在尝试使用 ANTD 组件实现下拉功能,例如:
- 当输入字段中有一些文本时,应显示下拉菜单。
- 当我在下拉菜单外点击时,下拉菜单应该关闭。
- 当我点击下拉菜单时,下拉菜单不应关闭。
- 如果输入字段中没有文本,则不应打开下拉菜单。
- 如果有一些文本,单击输入字段时下拉菜单不应关闭。
我无法达到第 5 个要求。每当我单击输入字段时,下拉菜单会打开和关闭,如下所示:
这不应该发生。
示例工作代码:
state = {
visible: false,
searchInput: null
};
handleVisibleChange = flag => {
if (!this.isDefined(this.state.searchInput)) {
this.removeDropdown();
} else {
this.setState({ visible: flag });
}
};
removeDropdown = () => {
this.setState({ visible: false });
};
showDropdown = () => {
this.setState({ visible: true });
};
checkInput = value => {
if (this.isDefined(value)) {
this.setState({ searchInput: value });
this.showDropdown();
} else {
this.setState({ searchInput: null });
this.removeDropdown();
}
};
render() {
const menu = (
<Menu>
<Menu.Item key="1">Clicking me will not close the menu.</Menu.Item>
<Menu.Item key="2">Clicking me will not close the menu also.</Menu.Item>
<Menu.Item key="3">Clicking me will not close the menu.</Menu.Item>
</Menu>
);
return (
<Dropdown
overlay={menu}
trigger={['click']}
onVisibleChange={this.handleVisibleChange}
visible={this.state.visible}
>
<Search
value={this.state.searchInput}
onInput={e => this.checkInput(e.target.value)}
/>
</Dropdown>
);
}
完整代码:https://stackblitz.com/edit/react-srz4ml?file=index.js
我尝试使用onBlur() 和onFocus() 方法而不是onVisibleChange(),但它违反了第三个要求。
有人可以帮我解决这个问题吗?
谢谢。
【问题讨论】:
标签: javascript reactjs antd