我的material-ui库的ToggleButtonGroup组件有一个问题,就是在onChange处理程序中,一开始我的代码比较复杂,我把问题一个一个的排除掉,直到我得到了这段代码,但是我无法理解这段代码的行为。
export default function ToggleButtons() {
// setting local state
const [values, setValues] = useState(()=>[]);
// toggle buttons handler
const onChangeHandler =(event: any,newValues: string[]) => {
setValues(newValues);
console.log('newValues',newValues);
console.log('state values',values);
};
return (
<ToggleButtonGroup
value={values}
onChange={onChangeHandler}
>
<ToggleButton value='first' >first</ToggleButton>
<ToggleButton value='second' >second</ToggleButton>
<ToggleButton value='third' >third</ToggleButton>
</ToggleButtonGroup>
);
}
从外表上看一切都很完美,但内心深处却有一些东西吸引着我。
但请检查我的控制台##
*选中第一个按钮
*未选中第一个按钮
*选中第二个按钮,然后选中第三个按钮
好像本地状态总是延迟,是不是写错了,如果没有,问题在哪里?
2条答案
按热度按时间qjp7pelc1#
React异步更新状态,因此console.log打印的是过时的数据。
如果使用React dev tools查看状态,则它工作正常:
dauxcl2d2#
尝试使useState语句与文档中的完全相同。https://mui.com/material-ui/react-toggle-button/
看一看=〉您完成了:
const [values, setValues] = useState(()=>[])
他们做到了:为什么要用数组而不是简单字符串?2看看它们的实现: