Реагирует, уменьшает, неизменяемый — не удается получить доступ к ключу JSON в mapStateToProps

#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')
  };
};