Reactjs Redux存储(仅返回初始状态)不更新(操作工作正常)

Reactjs Redux存储(仅返回初始状态)不更新(操作工作正常),reactjs,typescript,redux,react-redux,redux-thunk,Reactjs,Typescript,Redux,React Redux,Redux Thunk,身份验证完成后,我可以看到操作正在更新,并且reducer正在更新,但是mapstatetops不会对新的reducer状态执行任何操作 存储在每次更新时都会记录相同的状态(初始状态) 从“React”导入React; 从“redux”导入{bindActionCreators} 从“react firebaseui/StyledFirebaseAuth”导入StyledFirebaseAuth; 从“react router dom”导入{Redirect} 从“firebase”导入fire

身份验证完成后,我可以看到操作正在更新,并且reducer正在更新,但是
mapstatetops
不会对新的reducer状态执行任何操作

存储在每次更新时都会记录相同的状态(初始状态)

从“React”导入React;
从“redux”导入{bindActionCreators}
从“react firebaseui/StyledFirebaseAuth”导入StyledFirebaseAuth;
从“react router dom”导入{Redirect}
从“firebase”导入firebase;
从'react redux'导入{connect};
从“../reducer/actions”导入{signIn,signOut}
从“../firebase”导入{auth}
类LoginPage扩展了React.PureComponent{
//配置FirebaseUI。
uiConfig={'FirebaseUI Config'}
componentDidMount=()=>{
auth.onAuthStateChanged((用户)=>{//获取身份验证时的用户对象
console.log('OnAuthStateChanged',用户)
log('检查AuthChange中的道具是否更改',this.Props.isauthed)
如果(用户){
this.props.sign(用户)
}否则{
this.props.signOut(用户)
}
});
}
render(){
console.log('Check-If-Props-Change-in-Render',this.Props.isauthed)
如果(!this.props.isauthed){
返回(
我的应用程序
请登录:

); } 返回( ) } } 导出默认值(登录页面);
JS应该分派和更新道具

从'react redux'导入{connect};
从“../reducer/actions”导入{signIn,signOut}
从“redux”导入{bindActionCreators}
从“/LoginPage”导入登录页面;
常量mapStateToProps=(状态)=>{
console.log('LOGINmapstatetoprops',state.authoted)
返回{
isauthed:state.Authed.isauthed,
}
}
const mapDispatchToProps=(调度)=>{
console.log('loginmapdispatchops')
返回bindActionCreators({signIn,signOut},dispatch)
}
导出默认连接(mapStateToProps、mapDispatchToProps)(登录页面);
减速器

从“../components/LoginPage”导入LoginPage;
从“firebase”导入firebase;
常量初始状态={
我授权:错,
错误:“”
}
const AuthReducer=(状态=初始状态,操作)=>{
console.log('这是一个操作',操作)
开关(动作类型){
案例“IsSignedIn”:
返回{
……国家,
isauthed:action.payload
}
打破
案例“未签名”:
返回{
……国家,
isauthed:action.payload
}
打破
默认值:返回状态
}
}
导出默认值;
这是操作文件

export const signIn=(用户)=>{
console.log('这是来自操作',用户)
返回{
类型:“isSignedIn”,
有效载荷:正确
}
}
导出常量签出=(用户)=>{
console.log(用户)
返回{
类型:“isNotSignedIn”,
有效载荷:错误
}
}
Redux商店

从'redux'导入{createStore};
从“redux记录器”导入记录器;
从'redux observable'导入{createEpicMiddleware};
从“./reducer/index”导入{AllReducers};
//从“./modules/rootEpic”导入rootEpic;
//const-epicMiddleware=createEpicMiddleware(rootEpic);
常量存储=创建存储(所有还原器);
store.subscribe(()=>{
console.log('storeupdated',store.getState())
});
导出默认存储;
组合传感器功能

从'redux'导入{combinereducer}
从“/AuthReducer”导入{AuthReducer}
从“./UserReducer”导入{UserReducer}
导出常量AllReducers=组合减速机({
Authed:AuthReducer
用户:UserReducer
})

似乎您在
'isSignedIn'
'isSignedIn'
之间有打字错误(第一个字母不同)

您可以通过使用在单独文件中声明的变量来避免这种情况。对于操作类型,我喜欢称之为
types.js

// types.js
export const IS_SIGNED_IN = 'isSignedInOrEvenWhateverButYouBetterKeepAClearName'
// (same with all your types)
然后可以将此变量导入其他文件中。你不会再有打字错误了


附言:你可以在redux中找到所有这些想法,你的行动调度行动类型为
isSignedIn
isNotSignedIn
,你的减速机预期
isSignedIn
isNotSignedIn
为大写字母。我建议在动作类型中使用所有大写字母,因为它们是常量。同样,正如文档中所写的,多谢了,伙计,这正是问题所在,愚蠢的我忘记了这一点,多谢了,伙计!愚蠢的我,我怎么会错过它,现在它不是重定向(可能是因为我滥用了连接方法)