所以我在Material UI react js中有这段代码,它没有正确更新值,或者我认为,为了进一步解释这一点,我有这段代码
import * as React from 'react';
import Tabs from '@mui/material/Tabs';
import Tab from '@mui/material/Tab';
export function Home() {
const [value, setValue] = React.useState('Pending');
const handleChange = (event, newValue) => {
setValue(newValue);
console.log(value);
};
return (
<div>
<>
<Tabs
value={value}
onChange={handleChange}
textColor="secondary"
indicatorColor="secondary"
aria-label="secondary tabs example"
>
<Tab value="Pending" label="Pending" />
<Tab value="Received" label="Received" />
<Tab value="Prepared" label="Prepared" />
<Tab value="Cancelled" label="Cancelled" />
</Tabs>
</>
</div>
);
}
如果我运行此代码并单击标签为"挂起"的选项卡,console.log将不会被触发。如果我再次单击标签为"已接收"的console.log将显示"挂起"而不是"已接收"。
这种情况经常发生,我以为当你设置值和控制台日志时,它应该显示你选择的最新值。
样本输出:
如您所见,我当前选择了"已接收"标签,但在显示屏上显示"待定"
这是react js/Material UI的行为方式吗?还是我在这里遗漏了什么?
谢谢
1条答案
按热度按时间lpwwtiir1#
正如DaveNewton在评论中所说的,设置状态是异步的,如ReactDocs中所述:https://reactjs.org/docs/state-and-lifecycle.html#state-updates-may-be-asynchronous
如果要对该值执行
console.log
操作,可以更新处理程序以记录新值或者,您可以在处理程序外部使用
useEffect
,以便在value
发生更改时始终记录它