在承诺中反应useState setter不会更新

时间:2020-07-09 20:27:31

标签: reactjs react-hooks use-state

我正在尝试更新axios响应中的usestate计数,它无法正常工作。

let [ validationCount , setValidationCount ] = useState(0);


function getValidationResponse(validationUrl:string, validationKey:string)
    {
           axios.get("https://test.com/health")
                .then(res => {
                    setValidationCount(validationCount+1);
                }).catch(err => {
                
            });
            
        return "";
    }

上面的函数被调用两次,但验证计数始终为1。

有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

根据getValidationResponse的使用方式,我怀疑关闭可能会捕获validationCount0的闭包问题,从而导致更新后的值始终为1。 / p>

尝试使用functional updates,它将根据先前的值更新validationCount的值。

setValidationCount(prevCount => prevCount + 1);

答案 1 :(得分:0)

这是一个关闭问题,您可以在操作here中看到它,基本上,如果缓慢单击它,它会正常工作,如果在完成上一个更新之前多次单击它,则可以创建函数validateCount仍未更新的地方。最好记住setState是一个异步函数。