Я пытаюсь получить только те части избыточного состояния, которые я буду использовать в компоненте, как показано ниже:
const mapStateToProps = ({streams}, {auth: {user}}) => {
return {
streams,
userId: user ? user.googleUser.getBasicProfile().getId() : null
};
}
Вот код редуктора, который управляет частью «auth» состояния :
let initialState = {
user: {
isSignedIn: null,
googleUser: null
},
gAuthInstance: null
}
export const authReducer = (state = initialState, action) => {
switch(action.type) {
case 'AUTH_STATUS_CHANGED':
return {...state, user: authUserReducer(state.user, action) }
case 'GAUTH_INSTANCE':
return {...state, gAuthInstance: authInstanceReducer(state.gAuthInstance, action)}
default:
return state;
}
}
и вот мой комбинированный код редуктора, который я передаю в магазин при создании:
export default combineReducers({
auth: authReducer,
form: formReducer,
streams: streamsListReducer
});
при запуске приложения я получаю ошибку:
60 | const mapStateToProps = ({streams}, {auth: {user} }) => {
61 | return {
62 | streams,
63 | userId: user ? user.googleUser.getBasicProfile().getId() : null
Теперь я понимаю, что первоначально redux вызывает редукторы с состоянием undefined , что может быть причиной проблемы. Мои вопросы:
- Можно ли таким образом деструктурировать избыточное состояние?
- Можно ли сделать
const mapStateToProps = ({streams}, {auth: {user} = {} })
, чтобы назначить пустой объект свойству user? Это делает трюк наверняка.
Спасибо