【发布时间】:2020-11-03 19:51:27
【问题描述】:
我有一个功能可以禁用下拉菜单,直到在其他 2 个下拉菜单中做出选择。我相信由于useState 的一些异步问题,它没有正确启用下拉菜单。
const [homeSelect, setHomeSelect] = useState('Home');
const [hedgeSelect, setHedgeSelect] = useState('Hedge');
const [symbolSelect, setSymbolSelect] = useState('1');
const handleHome = (event) => {
setHomeSelect(event.target.value);
exchange_change();
};
const handleHedge = (event) => {
setHedgeSelect(event.target.value);
exchange_change();
};
const handleSymbol = (event) => {
setSymbolSelect(event.target.value);
};
const exchange_change = () => {
if (homeSelect != 'Home' && hedgeSelect != 'Hedge'){
//enable the symbol dropdown
setDisabled(false);
} else {
//disable the select exchanges dropdown
setDisabled(true);
}
}
<FormControl dense>
<TextField
id="standard-select-currency"
select
label="Home"
className={classes.textField}
value={homeSelect}
onChange={handleHome}
SelectProps={{
native: true,
}}
helperText="Please select exchange"
>
{home.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</TextField>
</FormControl>
<FormControl dense>
<TextField
id="standard-select-currency"
select
label="Hedge"
className={classes.textField}
value={hedgeSelect}
onChange={handleHedge}
SelectProps={{
native: true,
}}
helperText="Please select exchange"
>
{hedge.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</TextField>
</FormControl>
<FormControl dense>
<TextField
id="standard-select-currency"
select
label="Symbols"
className={classes.textField}
value={symbolSelect}
onChange={handleSymbol}
disabled={disabled}
SelectProps={{
native: true,
}}
helperText="Please select the exchanges"
>
{symbols.map((option) => (
<option key={option.value} value={option.value}>
{option.label}
</option>
))}
</TextField>
</FormControl>
home 和 hedge 下拉菜单需要在启用 symbol 下拉菜单之前进行选择。错误是symbol 下拉菜单在home 和hedge 被多次选择后才会启用。
如何更改我使用的方法以使用 useReducer 代替(如果这将解决状态更新问题)?我尝试阅读它,但不明白我的开关盒是什么。
感谢您的帮助,谢谢。
【问题讨论】:
标签: javascript reactjs react-hooks use-state use-reducer