首页 > 解决方案 > React ComponentDidMount 中的状态是否发生变化?

问题描述

所以目前,GetAllClients如果状态isAdmintrue. 我的代码所做的是,首先调用一个 APIGetUserName来获取用户nameisAdmin状态。如果 isAdmin 是true,则调用第二个 API 请求GetAllClients。但是,由于某种原因,该状态isAdmin仍然false有效ComponentDidMount。当我在函数中使用 console.log() 时render,状态isAdmintrue.

saveUserName 是一个函数,它将分配nameisAdmin适当地action.payload使用 Redux MapDispatchToProps。

我已经尝试过异步我的 ComponentDidMount 但仍然没有运气。

  componentDidMount = async () => {
    const saveUserName = this.props.onSaveUserName;
    const storeClients = this.props.onStoreClients;
    // eslint-disable-next-line
    const a = await APIFetchFunctions.GetUserName(localStorage.userId, saveUserName);

    // console.log() isAdmin state here is false 

    if(this.props.isAdmin === true) {
      APIFetchFunctions.GetAllClients(storeClients)
    }
  }

  render() {
    // console.log() isAdmin state here is true
  }

我想true在 ComponentDidMount 中获取 isAdmin。不确定是否可能。如果有其他建议,欢迎在这里提出建议。

标签: javascriptreactjsasync-await

解决方案


在您的代码中,我观察到两件事。

  1. 在进行getUsernameapi 调用并获得结果后,您并没有将状态设置isAdmin为 true。我认为你应该先这样做。
  2. componentDidMount 中的条件显示this.props.isAdmin而不是this.state.isAdmin. 这是预期的条件吗?根据我从您问题的第一行收集到的信息,如果this.state.isAdmin为真,您想进行第二次 api 调用。

推荐阅读