Javascript 韩元';不允许在组件内部进行分派
在帖子底部更新 我有一个React容器组件,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.
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登录按钮解决了此问题,但请检查我的答案并删除条件。如果没有帮助,我将删除我的答案。将检查!谢谢谢谢你的帮助!