Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/472.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/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
Javascript useState函数未立即更新_Javascript_Reactjs - Fatal编程技术网

Javascript useState函数未立即更新

Javascript useState函数未立即更新,javascript,reactjs,Javascript,Reactjs,我正在使用react管理框架。我正在使用useState方法设置是否选中复选框: const [checked, setChecked] = useState(false); 根据checked的值,我修改了一些其他常量。但是,我遇到了一个问题,即检查值没有立即更新。这一切都以这种方式发生: const handleCheckbox = () => { setChecked(!checked); if (checked === true)

我正在使用react管理框架。我正在使用useState方法设置是否选中复选框:

const [checked, setChecked] = useState(false);
根据checked的值,我修改了一些其他常量。但是,我遇到了一个问题,即检查值没有立即更新。这一切都以这种方式发生:

const handleCheckbox = () =>
    {
        setChecked(!checked);

        if (checked === true) 
        {
            input.onChange('');
        }
        else 
        {
            input.onChange(defaultVal);
        }
    }
有没有像setState中那样的回调函数?或者我应该使用完全不同的东西


提前感谢。

您必须注意,功能组件中的状态更新是异步的,并且也受闭包的影响,因此在相同的渲染周期中不会看到更新的值

有关更多详细信息,请查看此帖子:

另外,与类组件中的this.setState不同,useState的状态更新程序不提供回调

您可以使用useEffect实现相同的行为

const handleCheckbox = () =>
    {
        setChecked(!checked);
    }

const initialRender = useRef(true);

useEffect(() => {
   if(!initialRender.current) {
   if (checked === true) 
        {
            input.onChange('');
        }
        else 
        {
            input.onChange(defaultVal);
        }
    }
    else {
       initialRender.current = false;
    }
}, [checked])

如果要使用useState钩子在状态更改时调用回调函数,可以使用附加到状态更改的useffect钩子。应该是这样的

    useEffect(() => {
        if (checked === true) 
        {
            input.onChange('');
        }
        else 
        {
            input.onChange(defaultVal);
        }
    }, [!checked])


,这将帮助您解决问题,谢谢。