React原生选择器值未正确更新



我在react native中工作,我使用picker作为下拉菜单

<Picker
style={styles.picker}
selectedValue={selectedsubject}
onValueChange={(subjectValue) => pickerActivity(subjectValue)}>
{allsubjects.map((item, index) => {
return (<Picker.Item label={item} value={item} key={index} />)
})}
</Picker>

onValueChangeprop我正在调用这个函数:

const pickerActivity = (val) => {
setselectedsubject(val)
console.log("============")
console.log(val)
console.log(selectedsubject)
console.log("============")
}

因此,当从菜单项中选择的值时,我将所选值传递给函数pickerActivity,在此函数中,我将状态selectedsubject更新为传递的值,然后我控制状态和值,并且在列表中我有两个值,让我们假设(value1 and value2),所以让我们假设我按下value1,那么发生了什么:它只控制日志传递的值,对于状态,它控制日志空字符串如下所示:

[Sat Jan 23 2021 19:43:28.899]  LOG      ============
[Sat Jan 23 2021 19:43:28.900]  LOG      value1
[Sat Jan 23 2021 19:43:28.901]  LOG      
[Sat Jan 23 2021 19:43:28.902]  LOG      ============

和第二次当我从下拉菜单中按下value2时,传递的值将是value2,这是正确的,但对于状态,它将显示从菜单中选择的前一项,value1如下所示:

[Sat Jan 23 2021 19:43:28.899]  LOG      ============
[Sat Jan 23 2021 19:43:28.900]  LOG      value2
[Sat Jan 23 2021 19:43:28.901]  LOG      value1
[Sat Jan 23 2021 19:43:28.902]  LOG      ============

所以问题是状态不会从第一次更新,这里是我的状态:

const [selectedsubject, setselectedsubject] = useState('')  

应该用大写字母定义set-state函数

const [selectedsubject, setSelectedsubject] = useState('');

目前,在状态更新之前,您正在调用console.log。要查看更新的状态,您需要使用useEffect,它只在状态更新时触发:

useEffect(() => {
console.log(selectedsubject);
})

使用useState钩子提供的更新程序进行状态更新是异步的,并且不会立即反映。

即使setselectedsubject(val)被触发,selectedsubject的值也不会立即更新。它将保持先前的值。

最新更新