Reactjs 如何使用axios和React State钩子发出POST请求
我怎样才能正确地提出以下POST请求Reactjs 如何使用axios和React State钩子发出POST请求,reactjs,async-await,axios,Reactjs,Async Await,Axios,我怎样才能正确地提出以下POST请求 const postWorkout = async () => { setCompletedWorkout({ date: 31, day: workout.mains[0].day, exercises: completedExercises }) try { await axios.post('/history', completedWorkout) } c
const postWorkout = async () => {
setCompletedWorkout({
date: 31,
day: workout.mains[0].day,
exercises: completedExercises
})
try {
await axios.post('/history', completedWorkout)
} catch(error) {
throw error
}
}
我相信它会在完成训练之前发出请求,而训练实际上是通过一个空文档设置的,如DB中所示:
我假设
setCompletedWorkout
正在将其设置为状态。
如果是这样,您将需要等待该操作完成,因为设置状态是异步的。
您可以使用useffect
这样做:
useEffect(() => {
// POST HERE
}, [completedWorkout]);
useffect
中的代码将在您的completedWorkout
设置后执行我假设setCompletedWorkout
将其设置为状态。
如果是这样,您将需要等待该操作完成,因为设置状态是异步的。
您可以使用useffect
这样做:
useEffect(() => {
// POST HERE
}, [completedWorkout]);
useffect
中的代码将在设置completedWorkout
后执行更新completedWorkout
后是否要发出请求?状态更新不会立即发生completedWorkout
是常量(或应该是常量),在调用函数next render之前无法更改。您可能需要将帖子移动到useffect
或直接使用新对象。是的,我需要!到目前为止,我唯一尝试的解决方法是将它们放在不同的函数中,然后先调用setCompletedWorkout函数,然后调用函数发出请求。然而,这可能不是最有效的方法。。。我希望它们具有相同的功能您想在更新completedWorkout
后发出请求吗?状态更新不会立即发生completedWorkout
是常量(或应该是常量),在调用函数next render之前无法更改。您可能需要将帖子移动到useffect
或直接使用新对象。是的,我需要!到目前为止,我唯一尝试的解决方法是将它们放在不同的函数中,然后先调用setCompletedWorkout函数,然后调用函数发出请求。然而,这可能不是最有效的方法。。。我想让他们在同一个功能谢谢!我已经有了一个useEffect,它可以在第一次渲染时获取数据。是否可以有多个useEffects或只有一个useEffects?您可以拥有的useEffects的数量没有限制。是否有方法仅在设置训练时调用useEffects?我的依赖项数组是[workout],但根据一些文档,它也在第一次渲染时被调用?所以它实际上发布了两次,第一次渲染时发布一次,第二次渲染时发布setWorkoutcalled@nalanart在useEffect中,也许您可以添加一个检查以确保completedWorkout不是空的/空的谢谢!我已经有了一个useEffect,它可以在第一次渲染时获取数据。是否可以有多个useEffects或只有一个useEffects?您可以拥有的useEffects的数量没有限制。是否有方法仅在设置训练时调用useEffects?我的依赖项数组是[workout],但根据一些文档,它也在第一次渲染时被调用?所以它实际上发布了两次,第一次渲染时发布一次,第二次渲染时发布setWorkoutcalled@nalanart在useEffect中,也许您可以添加一个检查以确保completedWorkout不是空的/空的