我目前正在开发一个涉及登录用户的项目。在我的 redux 状态下,我有一个用户,它是一个不为空的对象。但是当我尝试从此用户对象获取 Angular 色时,我突然收到错误“状态为空”
this.props.userState.user
返回具有 Angular 色属性的用户对象。
this.props.userState.user.role
抛出错误“TypeError: this.props.userState.user is null”
编辑:以下是整个文件中的所有代码。
class ResultsMain extends Component {
componentDidMount() {
firebase.auth().onAuthStateChanged(user => {
if (user)
getUser(user.email).then(foundUser => {
console.log('User found:', foundUser);
this.props.doSetUser(foundUser);
}).catch((err) => {
console.log(err)
this.props.history.push('/');
});
});
}
render() {
console.log("THE PROPS", this.props.userState.user)
if (this.props.userState.role === "teacher") return <TeacherSearchPage/>
else return <Results />
//else return <div> </div>
}
}
function mapStateToProps(state) {
return {
userState: state.userState,
}
}
function mapDispatchToProps(dispatch) {
return {
doSetUser: user => dispatch(userActions.setUser(user)),
}
}
export const resultsMainPage = ReactRedux.connect(mapStateToProps, mapDispatchToProps)(ResultsMain);
reducer :
const initialState = {
user: null,
finished: false,
}
function copyAndUpdateObj(copiedObject, update) {
return Object.assign({}, copiedObject, update);
}
export default function userReducer(state = initialState, action) {
switch (action.type) {
case INSERT_USER:
return {...state, user: action.userInformation};
case SET_USER: {
let changes = {
user: action.user
}
return copyAndUpdateObj(state, changes);
}
default:
return state;
}
}
最佳答案
你的 reducer 必须是这样的:
function reducer(state = initialState, action) {...}
无论 this.props.userState
的值是什么,都来自于您在一开始对 initialState
的定义。请确保在您的应用程序中定义 initialState
对象。
仔细检查您是否在初始状态下定义了 userState.user
。
关于javascript - Redux 状态已填充,但我收到错误 state is null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50525842/