javascript - React - 如何在另一个 React-Select 更改时清除 React-Select 的值
问题描述
我有两个并排的组件,它们是React-Select
下拉列表组件:
<SelectField
options={props.directories}
placeholder="Directory"
onChange={props.onDirectoriesChange}
value={props.directoryCodeName}
isClearable={true}
/>
<SelectField
options={props.subDirectories}
placeholder="Sub Directory"
onChange={props.onSubDirectoryChange}
value={props.subDirectoryCodeName}
isClearable={true}
/>
现在,当我在第一个下拉列表中选择一个值时,第二个下拉列表将根据在第一个下拉列表中选择的内容进行填充。当我在第二个下拉列表中选择一个选项然后更改第一个下拉列表中的选项时,第二个下拉列表中的选项列表已更改,这很棒。但是,第二个下拉列表的当前值不会被清除。清除第二个下拉列表值的最佳方法是什么?
首先想到的是在onChange
下面的处理程序中放置一些代码:
const onDirectoriesChangeHandler = (props: WrappedFieldsProps) => (
selectedDirectories: IOption<string>
) => {
props.directoryCodeName.input.onChange(fromJS(selectedDirectories));
};
const onSubDirectoryChangeHandler = (props: WrappedFieldsProps) => (
selectedSubDirectories: IOption<string>
) => {
props.subDirectoryCodeName.input.onChange(fromJS(selectedSubDirectories));
};
但是我已经走到了死胡同,我正在考虑“提升状态”,除非有办法使用 React-Select 的属性来做到这一点?
解决方案
我认为你的直觉是正确的——你应该“提升状态”。可能有一种方法可以做到这一点,但以后可能会导致其他一些问题。
大概您的两个Select
组件包含在其他一些父组件中?您可以使用该onChange
函数通过 设置清除第二个输入的值setState()
,例如:
onChangeSelectOne(value) {
this.setState({
directoryCodeName: value,
subDirectoryCodeName: null
})
}
然后参考您定义这两个Select
s 的状态:
<SelectField
options={props.directories}
placeholder="Directory"
onChange={props.onDirectoriesChange}
value={state.directoryCodeName} // notice state!
isClearable={true}
/>
<SelectField
options={props.subDirectories}
placeholder="Sub Directory"
onChange={props.onSubDirectoryChange}
value={state.subDirectoryCodeName} // notice state!
isClearable={true}
/>
最后一步是在其构造函数中填充组件的状态:
constructor(props) {
this.state = {
directoryCodeName: props.directoryCodeName,
subDirectoryCodeName: props.subDirectoryCodeName
}
}
调用setState()
将触发组件的重新渲染,将下拉列表更新为您设置的值。
推荐阅读
- google-apps-script - Google 应用脚本属性服务 | 安全和财产寿命
- ruby - 滚动到无法在 selenium webdriver 上工作的视图 - Ruby + watir-webdriver 用于自动化
- flask - 当某些微服务出现故障时,重新加载时有机会更改IP地址..那么,如何设置每个微服务的IP和端口?
- react-native - 如何在不中断其余代码的情况下在 react-native 中制作分钟间隔计时器
- sql - 从 SQL Server 中的多个打卡或多个打卡中获取打卡和打卡时间
- amazon-web-services - 在 aws s3 存储桶中设置自定义路径/前缀的最佳方法
- python-3.x - 如何使用 python3 将返回值从一个函数访问到另一个函数?
- c# - 我可以记住一个通用方法吗?
- jetty - 如何控制 Jetty 8.1.5 的 IP 访问
- symfony - 如何验证依赖于 Symfony 中另一个字段的字段