Reactjs 设置值的条件运算符不同步工作?
早上好 我在使用条件运算符设置新值时遇到了一个看似愚蠢的问题。下面是一个非常简化的代码块,用于将“selectedDc”的值从0切换到1,或者从0切换到1,然后从服务器获取具有更改值的新值。但是,当代码到达API调用行时,“selectedDc”的新值不会立即出现,因此调用是使用旧值进行的。这会导致程序在用户意图后“单击一次”运行Reactjs 设置值的条件运算符不同步工作?,reactjs,Reactjs,早上好 我在使用条件运算符设置新值时遇到了一个看似愚蠢的问题。下面是一个非常简化的代码块,用于将“selectedDc”的值从0切换到1,或者从0切换到1,然后从服务器获取具有更改值的新值。但是,当代码到达API调用行时,“selectedDc”的新值不会立即出现,因此调用是使用旧值进行的。这会导致程序在用户意图后“单击一次”运行 import React, {useState} from 'react'; const App = () => { const [selectedDc,
import React, {useState} from 'react';
const App = () => {
const [selectedDc, setDc] = useState(0)
//event triggered by pressing button
const handleDcChange = async (event) => {
event.preventDefault()
console.log(selectedDc) //prints 0 as expected
const dcValue = (selectedDc === 0) ? 1 : 0
console.log(dcValue) //prints 1 as expected
setDc(dcValue)
console.log(selectedDc) //still after setting new value, prints 0??
//Following lines are just several api calls that work as intended, no need to show implementation.
await daycareService.changeDc(selectedDc)
setShifts(await shiftService.getAll())
setDcTeams(await daycareService.getGroups(selectedDc))
}
}
我第一次尝试在不首先创建新常量的情况下设置新的值,但它的工作方式完全相同,落后了一步
selectedDc === 0 ?
setDc(1) :
setDc(0)
我做错了什么,我应该怎么做才能用第一个触发器获得正确的输出?selectedDoc将包含上次调用useState(在渲染期间)时检索到的状态值,并且在此之后不会更改
useState
实现无法访问selectedDoc
变量,因为该变量超出其范围,因此无法更改其值
除上述内容外,您可能还需要记住。您可以在函数的其余部分继续使用
dcValue
,因为这正是您想要的值。嗯,谢谢,我不知道useState与在没有实际useState()调用的情况下设置新值有关。我必须阅读和学习那篇文章。那没有任何意义,但我想复制品会澄清问题。是的,对不起,我真的是个新手,我可能会胡说八道:)但是谢谢你的帮助useState
是提供状态和状态更新程序功能的react钩子。复制应该会有帮助,但如果没有,这里有官方的react钩子来帮助你。