Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在ComponentDidMount中获取数据不工作_Javascript_Reactjs_Asynchronous_React Native_Fetch - Fatal编程技术网

Javascript 在ComponentDidMount中获取数据不工作

Javascript 在ComponentDidMount中获取数据不工作,javascript,reactjs,asynchronous,react-native,fetch,Javascript,Reactjs,Asynchronous,React Native,Fetch,我试图在componentDidMount中获取数据、设置状态和更改路由,但无法完成(仅在单击屏幕后)。我想这与获取的异步性质有关,但如何修复它呢 componentDidMount(){ AsyncStorage.multiGet([USER_TOKEN, USER_REFRESH_TOKEN,USER_REMEMBERED]).then((data) => { const userRemembered = JSON.parse(data[2][1]) const userAc

我试图在componentDidMount中获取数据、设置状态和更改路由,但无法完成(仅在单击屏幕后)。我想这与获取的异步性质有关,但如何修复它呢

componentDidMount(){

AsyncStorage.multiGet([USER_TOKEN, USER_REFRESH_TOKEN,USER_REMEMBERED]).then((data) => {
  const userRemembered = JSON.parse(data[2][1])
  const userAccessToken = data[0][1]
  const userRefreshToken = data[1][1]

  if (userRemembered) {
    fetch("SOME_URL", {
      method: "POST",
      headers: {
        'Accept': 'application/json',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({
        refreshToken: userRefreshToken
      })
    })
    .then(response => response.json())
    .then(responseData => {
      console.log(responseData); // only after clicking on the screen it is logged
      if (responseData.success) {
        AsyncStorage.multiSet([[USER_TOKEN,responseData.response.accessToken],[USER_REFRESH_TOKEN,responseData.response.refreshToken],[USER_REMEMBERED,JSON.stringify(true)]])
        this.setState({
          token:responseData.response.accessToken,
          refreshToken: responseData.response.refreshToken,
          isLoggedIn: true
        }) //only after clicking on the screen state is changed
        this.changeRoute(this.state) //only after clicking on the clicking on the screen route is changed
      }
      else {
        console.log("API is not responding");
      }
    })
    .catch((error) => {
      console.log(error)
    })
  }
  else{
    console.log('user has not checked Remember Me');
  }
})

}我终于明白了。我打开了远程JS调试,它把事情搞砸了。我关闭了它,一切正常。

为了在更新后立即反映状态的变化,您应该在
componentdiddupdate()
中使用您的控件是否将转到componentDidMount?如果是,则fetch工作不正常?@JigarShah可能我没有正确理解您。您是否建议更改
组件更新()
中的路径?@VikramSaini Promise正在运行。第二次
.then()
之后什么都不起作用。如果我单击屏幕上的某个位置,它就会工作,状态会更新,路由也会更改,但在页面加载时不会工作,这很奇怪。是的,所有操作都应该放在
componentdiddupdate
中,一旦设置了状态,它将反映您放置的位置。