我有一个下拉菜单,用于选择一个状态。它用于显示每个状态的不同数据。我是console.log(),每当我选择一个状态时,初始状态是“",当我再次更改时,它似乎落后一步。例如:我的下拉菜单开始是空的,然后我选择纽约。它打印'',然后我选择缅因州,它打印纽约。我想我明白为什么会发生,但我不知道如何解决它。
ProjectStatus.js
const [selectedState, setSelectedState] = useState('');
const handleChange = event => {
setSelectedState(event.target.value);
console.log(selectedState);
};
return (
<div className='project-status-nav'>
<h3>Project Status Page</h3>
<hr className='separator' />
<FormControl variant='filled' className={classes.formControl}>
<InputLabel htmlFor='selectState'>Select State</InputLabel>
<Select
id='selectState'
className='selectStyle'
value={selectedState}
onChange={handleChange}>
<MenuItem value={''}> </MenuItem>
<MenuItem value={'New York'}>New York</MenuItem>
<MenuItem value={'New Jersey'}>New Jersey</MenuItem>
<MenuItem value={'Colorado'}>Colorado</MenuItem>
<MenuItem value={'Florida'}>Florida</MenuItem>
<MenuItem value={'Maine'}>Maine</MenuItem>
</Select>
</FormControl>
</div>
);
3条答案
按热度按时间wwtsj6pe1#
这是因为state不会立即更新,当函数被调用时,selectedState被声明,并且直到下一次调用(update)才改变。
如果你想用
useEffect
观察selectedState的变化,你可以这样做,或者创建一个自定义钩子来完成它:dgiusagp2#
setSelectedState是不同步的,因此当您在调用setSelectedState之后立即记录selectedState的值时,您得到的是当前值,而不是新值。
wqsoz72f3#
我也遇到过同样的问题,但我是这样解决的。