Reactjs 如何使用axios和React State钩子发出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

我怎样才能正确地提出以下POST请求

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不是空的/空的