Javascript 减速机内部状态的值分配将执行两次
我使用的是Reacts useReducer钩子。我试图增加+1或-1,这取决于按下react上的哪个按钮。我希望在返回值之前分配该值,以便将该值发布到数据库。当我运行代码时,它在0-1上增加1,但在那之后它增加2。我尝试console.log查看值更改,它只运行了console.log一次,但运行了增量分配两次。在返回对象之前,如何在案例中只运行一次值赋值。它还为每个值更改运行POST请求(2次)Javascript 减速机内部状态的值分配将执行两次,javascript,reactjs,object,switch-statement,use-reducer,Javascript,Reactjs,Object,Switch Statement,Use Reducer,我使用的是Reacts useReducer钩子。我试图增加+1或-1,这取决于按下react上的哪个按钮。我希望在返回值之前分配该值,以便将该值发布到数据库。当我运行代码时,它在0-1上增加1,但在那之后它增加2。我尝试console.log查看值更改,它只运行了console.log一次,但运行了增量分配两次。在返回对象之前,如何在案例中只运行一次值赋值。它还为每个值更改运行POST请求(2次) }您不应该在reducer函数中执行副作用(如发出API请求)。副作用属于useffecthoo
}您不应该在reducer函数中执行副作用(如发出API请求)。副作用属于
useffect
hook内部
您想做的可能是:
const reducer = (state, action) => {
switch (action.type) {
case "increment": {
return { count: state.count + 1 };
}
case "decrement": {
return { count: state.count - 1 };
}
default:
throw new Error();
}
};
您将有一个调用api的useffect
钩子
默认情况下,useffect
在第一次渲染和每次更新后都会运行。如果希望在每次某个值更改时重新运行,可以将该值放入dependencies数组中
useEffect(()=>{
makeSideEffect()
}, [valueThatDecidesWhenToRerun])
当您将新值指定给
state.count时,您正在改变您的状态。在返回值之前显式地进行计数。有关增量的实现,请参阅文档:我正在尝试在switch语句的case中运行POST请求,以便在每次增量或减量时都向数据库发送POST。如果我将递增或递减放在return语句中,那么我将无法使用带有更新值的POST请求。我进行了编辑以回答这一点。我希望这能回答你的问题
useEffect(()=>{
makeSideEffect()
}, [valueThatDecidesWhenToRerun])