Javascript 韩元';不允许在组件内部进行分派

Javascript 韩元';不允许在组件内部进行分派,javascript,reactjs,redux,react-redux,Javascript,Reactjs,Redux,React Redux,在帖子底部更新 我有一个React容器组件,AppContainer,它检测用户是否经过身份验证。如果用户通过身份验证,则显示路由、应用程序、标题等。如果用户未通过身份验证,则显示登录组件 AppContainer是一个已连接的组件(使用react-redux)。MapStateTrops和mapDispatchToProps如下所示: const mapStateToProps = function(state) { return { isAuthenticated: state.

在帖子底部更新

我有一个React容器组件,
AppContainer
,它检测用户是否经过身份验证。如果用户通过身份验证,则显示路由、应用程序、标题等。如果用户未通过身份验证,则显示登录组件

AppContainer
是一个已连接的组件(使用react-redux)。
MapStateTrops
mapDispatchToProps
如下所示:

const mapStateToProps = function(state) {
  return {
    isAuthenticated: state.Login.isAuthenticated,
  }
}

const mapDispatchToProps = function(dispatch, ownProps) {
  return {

    loginSuccess: (user) => {
      console.log("before dispatch")
      dispatch(loginSuccess(user))
    },

  }
}
  componentDidMount() {
    if (this.props.isAuthenticated) {
      console.log("REDUX AUTH'D")
    } else {

      if (localStorage.getItem("isAuthenticated") && !this.props.isAuthenticated) {

        console.log("BROWSER AUTHD, fire redux action")

        this.props.loginSuccess({
          profileObj: localStorage.getItem("profileObj"),
          tokenObj:   localStorage.getItem("tokenObj"),
          tokenId:    localStorage.getItem("tokenId"),
        })

      }

    }
  }
正在调度的
loginsucess
函数是一个操作创建者,它只是将用户信息存储在redux存储中。
Login.isAuthenticated
的默认状态为false

componentDidMount()
中,我检查
此.props.isAuthenticated
(来自redux存储中的用户信息)是否为真。如果没有,我检查
tokenId
是否在本地存储中。如果令牌位于localStorage中,我将调度
loginsucess
操作将该信息添加到redux存储中

然后,由于该信息在Redux存储中,因此该组件将更新并显示受保护的材质。这个很好用

我的
componentDidMount
功能如下:

const mapStateToProps = function(state) {
  return {
    isAuthenticated: state.Login.isAuthenticated,
  }
}

const mapDispatchToProps = function(dispatch, ownProps) {
  return {

    loginSuccess: (user) => {
      console.log("before dispatch")
      dispatch(loginSuccess(user))
    },

  }
}
  componentDidMount() {
    if (this.props.isAuthenticated) {
      console.log("REDUX AUTH'D")
    } else {

      if (localStorage.getItem("isAuthenticated") && !this.props.isAuthenticated) {

        console.log("BROWSER AUTHD, fire redux action")

        this.props.loginSuccess({
          profileObj: localStorage.getItem("profileObj"),
          tokenObj:   localStorage.getItem("tokenObj"),
          tokenId:    localStorage.getItem("tokenId"),
        })

      }

    }
  }
唯一的问题是我收到了以下警告:

警告:设置状态(…):只能更新已安装或正在安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是禁止操作。请检查t组件的代码。

虽然给出的错误表明setState()有问题,但我并没有在整个程序中的任何地方调用setState(),所以。。。但是删除componentDidMount中的
this.props.loginsAccess({…
)也会删除错误

“我的代码”中的
log
语句会在出现错误之前打印出来,如果存在身份验证,组件会按预期呈现受保护的信息。如果组件似乎正在工作,为什么会发生此错误

更新:

查看堆栈跟踪显示它来自我正在使用的google登录实用程序

这是该组件的代码:


这是NPM软件包提供的
google login
React组件的一个问题。我通过有条件地呈现
google login
组件(在其自己的容器组件中,未在原始问题中提供)解决了这个问题基于Redux状态下的isAuthenticated值。

请粘贴所有AppContainer代码此处是AppContainer的所有代码。也请查看我的更新。我通过有条件地在LoginContainerYeah中呈现google登录按钮解决了此问题,但请检查我的答案并删除条件。如果没有帮助,我将删除我的答案。将检查!谢谢谢谢你的帮助!