Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/24.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 - Fatal编程技术网

Reactjs 设置值的条件运算符不同步工作?

Reactjs 设置值的条件运算符不同步工作?,reactjs,Reactjs,早上好 我在使用条件运算符设置新值时遇到了一个看似愚蠢的问题。下面是一个非常简化的代码块,用于将“selectedDc”的值从0切换到1,或者从0切换到1,然后从服务器获取具有更改值的新值。但是,当代码到达API调用行时,“selectedDc”的新值不会立即出现,因此调用是使用旧值进行的。这会导致程序在用户意图后“单击一次”运行 import React, {useState} from 'react'; const App = () => { const [selectedDc,

早上好

我在使用条件运算符设置新值时遇到了一个看似愚蠢的问题。下面是一个非常简化的代码块,用于将“selectedDc”的值从0切换到1,或者从0切换到1,然后从服务器获取具有更改值的新值。但是,当代码到达API调用行时,“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钩子来帮助你。