React Native Dialog组件handleSubmit内setSeferBilgi赋值旧值问题求助
问题原因与解决方案
你的赋值逻辑本身没有错误,出现这个现象的核心原因是:React的useState状态更新是异步批量执行的。
当你在handleSubmit函数中调用setSeferBilgi后,React不会立刻修改seferBilgi的当前值,而是会把状态更新任务加入队列,等当前函数执行完毕后再批量处理更新。所以你在setSeferBilgi之后立刻打印seferBilgi,拿到的还是本次渲染周期中的旧值,并不是赋值没生效。
验证与修复方案
你可以通过两种方式确认赋值是正常的:
- 直接打印你构造的新状态对象,这个值就是你要写入的最新值:
const handleSubmit = () => { console.log(gidilenYer); console.log(ton); console.log(fiyat); // 构造新状态对象 const newSeferBilgi = { GidilenYer: gidilenYer, Ton: ton, Fiyat: fiyat }; // 直接打印新对象就能拿到正确的值 console.log("更新后的值为", newSeferBilgi); setSeferBilgi(newSeferBilgi); setDialogVisible(false) };
- 用useEffect监听
seferBilgi的变化,等状态更新完成后再打印就能拿到最新值:
// 直接使用已经引入的useEffect即可 useEffect(() => { console.log("seferBilgi已更新,最新值:", seferBilgi); }, [seferBilgi])
优化建议
建议你在打开弹窗的时候清空上一次的输入内容,避免旧值残留:
const showDialog = () => { setGidilenYer(""); setTon(0); setFiyat(0); setDialogVisible(true); };
内容的提问来源于stack exchange,提问作者Tarık Kantar
相关产品推荐
相关产品推荐

