reactjs useState运行速度不够快,无法执行提取请求

e0uiprwp  于 2022-11-22  发布在  React
关注(0)|答案(3)|浏览(142)

我想获取一个“board_ID”:fetch(“http://本地主机:4000/新游戏”),然后在以下fetch地址中使用board_ID:fetch(“http://localhost:4000/Turn/”+ board_ID)。问题是setboard_ID(之前用useState初始化)没有足够快地更新board_ID,因此在获取“Turn”时出现错误。解决此问题的最佳方法是什么?

useEffect(() => {
   if (didFetch == false) {
   fetch("http://localhost:4000/NewGame")
     .then(res => res.text())
     .then(
       (result) =>{
           console.log(result)
           **setboard_ID(result)**
       },
       (error) => {
           setisLoaded(true)
           seterror(error)
       }
     )
   }
 })

 useEffect(() => {
   if (getplayer == true){
     console.log("http://localhost:4000/Turn/" + board_ID)
     **fetch("http://localhost:4000/Turn/" + board_ID)**
     .then(res => res.text())
     .then(
       (result) =>{
           console.log(result)
           player = result
           setGetplayer(false)
       },
       (error) => {
           seterror(error)
       }
     )
   }
 })
jvlzgdj9

jvlzgdj91#

您可以尝试运行useEffect并依赖于该状态。

useEffect(function, [dependency])

然后,第一个useEffect将运行并更新启动第二个的状态

x9ybnkn6

x9ybnkn62#

将相关数组[board_ID]中的board_ID添加到第二个useEffect。
useEffect挂接允许您在功能组件中执行副作用。有一个依赖项数组可控制何时应运行效果。它在装入组件时运行,并在useEffect的依赖项更改后重新呈现组件时运行

uidvcgyl

uidvcgyl3#

我不知道为什么你的useEffects没有一个依赖数组(这很危险),因为它会重复调用生命周期方法,这会多次重新渲染UI/应用程序,因为应用程序可能会崩溃。另外,我没有看到任何检查第二个useEffects是否存在board_ID。
在相依性数组中新增board_ID应该可以修正部分问题。
你好

useEffect(() => {
 if (getplayer && board_ID !='' ){  // == true is redundant and board_ID != <your initial state means it has some valid value>
 console.log("http://localhost:4000/Turn/" + board_ID)
 **fetch("http://localhost:4000/Turn/" + board_ID)**
 .then(res => res.text())
 .then(
   (result) =>{
       console.log(result)
       player = result
       setGetplayer(false)
   },
   (error) => {
       seterror(error)
   }
  )
 }
},[board_ID])

相关问题