Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/react-native/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 反应本机选择器值未正确更新_Reactjs_React Native_Setstate - Fatal编程技术网

Reactjs 反应本机选择器值未正确更新

Reactjs 反应本机选择器值未正确更新,reactjs,react-native,setstate,Reactjs,React Native,Setstate,我在react native中工作,并使用选择器作为下拉菜单 <Picker style={styles.picker} selectedValue={selectedsubject} onValueChange={(subjectValue) => pickerActivity(subjectValue)}> {allsubjects.map((item, index) => {

我在react native中工作,并使用
选择器作为下拉菜单

  <Picker
         style={styles.picker}
         selectedValue={selectedsubject}
         onValueChange={(subjectValue) => pickerActivity(subjectValue)}>
          {allsubjects.map((item, index) => {
                            return (<Picker.Item label={item} value={item} key={index} />)
           })}
   </Picker>
因此,当从菜单项中选择值时,我将所选值传递给该函数中的函数
pickerActivity
,我将状态
selectedsubject
更新为传递的值,然后我控制状态和值,在列表中我有两个值,比如说(
value1和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,它仅在以下情况下激发:


您应该像这样用大写字母定义set state函数

const [selectedsubject, setSelectedsubject] = useState('');
目前,您正在状态更新之前调用
console.log
。 要查看更新的状态,需要使用useEffect,它仅在以下情况下激发:


使用
useState
hook提供的更新程序进行的状态更新是异步的,不会立即反映出来


即使触发了
setselectedsubject(val)
selectedsubject
值也不会立即更新。它将保留以前的值。

使用
useState
hook提供的更新程序进行的状态更新是异步的,不会立即反映出来


即使触发了
setselectedsubject(val)
selectedsubject
值也不会立即更新。它将保留以前的值。

“将setState()视为更新组件的请求,而不是即时命令。”@NadiaChibrikova如何使用功能组件实现这一点?您试图实现什么?在处理程序中,您可以使用
val
并在下次渲染时更新该值,除了混淆控制台日志之外,您还有什么问题?“将setState()视为更新组件的请求,而不是即时命令。”@NadiaChibrikova如何使用功能组件实现这一点?您试图实现什么?在处理程序中,您可以使用
val
并在下一次渲染时更新值,除了混淆控制台日志之外,您还有什么问题?仍然不工作更新我的答案仍然不工作更新我的答案
useEffect(() => {
  console.log(selectedsubject);
})