javascript - HOC Redux Dispatch 在子组件调用 React componentDidMount 后被调用

标签 javascript reactjs redux state amazon-cognito

我有一个高阶组件 (HOC),用于授权和刷新用户 session 。

这是 RequireAuth HOC,它是 componentWillMount

componentWillMount() {
  console.log('HOC componentWillMount');
   // checks with authorizer that token is valid if not refresh token
    getUserFromLocalStorage()
      // update redux with new refresh token
      .then(data => {
        console.log('getUserFromLocalStorage')
        this.props.setUserToReduxState(data);
        console.log(
          'user sucess retrieved and user setUserToReduxState: ',
          data
        );
      })
      .catch(() => {
        logoutUserFromReduxState();
      });
  }
}

这是我的路由调用

<Route exact path="/devices" component={RequireAuth(Devices)} />

这是我的 Devices 组件的 componentDidMount

componentDidMount() {
  console.log('componentDidMount')
  // calls api
  this.loadData();
}

此子组件调用需要 token 的 API。 但是,当 token 刷新时,它会在设备组件中调用 API get 之前刷新,但是从 HOC 中的“.then” promise 返回的 redux 操作不会在子组件中的 api 调用之前更新 redux 状态.

有没有办法确保 token 在 child 尝试调用 API 之前已处于更新/还原状态?

最佳答案

我认为您可以在 HOC 中添加一个条件来不呈现您的“增强组件”——在您的情况下是设备,直到使用用户 token 解析 setUserToReduxState。只有在设置了用户的 token 后,您的设备组件才会呈现 loadDate 方法将被触发。

例如- 您可以将用户的状态映射到一个变量。如果用户不存在 - 不要呈现您传递给 HOC 的组件。

编辑:(添加代码片段)

// In your render method get the current user from redux - see  mapStateToProps functoion
render(){
    const { user } = this.props;
    return (
        return (
        <div>
            {
              user && user.token
              ? <Component {...this.props} />
              : null // Here you can replace this with spinner if you want..
            }
        </div>
      )
    )
}


const mapStateToProps = (state) => ({
    user: state.auth.user
})

现在,当用户被设置时,您的组件将重新呈现,并且当 token 被确定设置时,设备组件将触发 loadData 方法。

关于javascript - HOC Redux Dispatch 在子组件调用 React componentDidMount 后被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49565276/

相关文章:

php - 在 PHP 中导入 JavaScript

javascript - react 警告 : flattenChildren(. ..) : Encountered two children with the same key, `.${index}`

javascript - flowtype:在 redux 操作中使用常量时为 "object literal could not decide which case to select"

javascript - javascript中的数组错误

javascript - Javascript 中的链表和对象错误

javascript - 是否可以刷新控制台(使其立即打印)?

javascript - 设置 Material UI Snackbar 的背景颜色

html - 搜索如何通过id在react中显示div

reactjs - 如何使用 React.js 在 Botframework v4 聊天应用程序中执行发送“键入指示器”?

reactjs - 有没有办法将 Redux 操作和 reducer 与 react-final-form 一起使用?