#reactjs #redux #state #immutable.js
#reactjs #уменьшение #состояние #immutable.js
Вопрос:
Надеюсь, действительно простой (здесь реагирует новичок!), Но, похоже, я не могу получить доступ к определенному ключу в свойстве state, возвращаемом из редуктора react / redux / immutable.
Рассмотрим следующее, где я хочу вернуть значение state.api.authenticated
:
function mapStateToProps(state) {
console.log('DEBUG 1: ', JSON.stringify(state));
console.log('DEBUG 2: ', JSON.stringify(state.api));
console.log('DEBUG 3: ', JSON.stringify(state.api.authenticated));
return {
authenticated: state.api.authenticated
};
}
Это возвращает следующее:
DEBUG 1: {"modals":{},"routing":{"locationBeforeTransitions":null},"api":{"loading":false,"requests":{},"errors":{"last":null},"data":{"articles":[]},"authenticated":true},"articles":{"to_read_count":0},"form":{"signin":{"registeredFields".... (redacted for brevity)
DEBUG 2: {"loading":false,"requests":{},"errors":{"last":null},"data":{"articles":[]},"authenticated":true}
DEBUG 3: undefined
Так явно, что state.api.authenticated
ОН находится в state
объекте, и все же я не могу получить к нему доступ!
Любой совет высоко ценится.
Правка 1: Определение начального состояния редуктора:
const initialState = Map({
loading: false,
requests: OrderedMap({}),
errors: Map({
last: null
}),
data: Map({
articles: List()
}),
authenticated: false
});
Значение настройки редуктора:
case AUTH_USER:
return state.set('authenticated', true);
Комментарии:
1. Вы пытались войти
this.props.authenticated
в свой компонент?2. попробуйте это
state.getIn(['api', 'authenticated'])
3. Спасибо @NicolaeMaties — getIn не используется для карты? К вашему сведению, я только что добавил initialState. Аутентификация должна быть логической.
4. это
state.api.getIn(['authenticated']).toJS()
должно сработать
Ответ №1:
РЕШЕНИЕ: хорошо, благодаря комментариям, которые я нашел, state.api.get
сработало:
const mapStateToProps = (state) => {
return {
authenticated: state.api.get('authenticated')
};
};