Переменные состояния связаны с именами редуктора в Redux - PullRequest
0 голосов
/ 11 февраля 2019

Это может быть действительно глупо, но я какое-то время держал голову вокруг этого.У меня есть проект React (с Redux).В mapStateToProps значение состояния приходит как undefined, если я пытаюсь получить доступ к состоянию напрямую как

const mapStateToProps = state => ({ data: state.data });

Вместо этого мне всегда приходится указывать имя моего редуктора (редуктор, который обрабатывает это конкретное состояние вэто) для доступа к значению состояния:

const mapStateToProps = state => ({ data: state.customReducer.data });

Вот мой код:

import { combinedReducer } from 'redux;
import customReducer from './customReducer'; 

const rootReducer = combineReducer({
      customReducer
});

export default rootReducer;

customReducer.js: следующим образом

  const initialState = {};

    const customReducer = ( state = initialState, action ) => {
         const { type, payload } = action;

         switch (type) {
               case 'SOME_ACTION':
                    return {
                         ...state,
                         data: payload.data
                    }
                    break;

               default:
                     return state;
         }
    } 

export default customReducer;

store.js

import { createStore, applyMiddleware } from 'redux';
import thunk from 'redux-thunk';
import rootReducer from '../reducers';

const configStore = () => {
     return createStore (
           rootReducer,
           applyMiddleware(thunk)
     );
} 

const store = configStore();

export default store;

Кто-нибудь знает, что не так с реализацией?Или это способ доступа к различным значениям состояния из разных хранилищ?

Как я могу напрямую получить доступ к любой переменной состояния как

data: state.`state_value` , instead of ,  data : state.`reducerName`.`state_value` ?

Любая помощь по этому вопросу будет высоко ценится.

Ответы [ 2 ]

0 голосов
/ 11 февраля 2019

Ну, combineReducers на самом деле не использует имя редуктора, а имя свойства, которое вы укажете для него.Если вы сделаете:

const rootReducer = combineReducer({
  foo: customReducer,
});

Вы сможете получить доступ к данным на state.foo.data.

0 голосов
/ 11 февраля 2019

В вашей реализации нет ничего плохого, так работает combineReducers.Имена редукторов используются для разделения вашего магазина (например, все в вашем users редукторе будет ниже state.users).

Если вы не хотите использовать имя редуктора в вашем mapStateToProps, вы можете использовать селекторы .Однако в селекторе вам все равно придется использовать state.reducerName.

Если вы действительно не хотите проходить более одного слоя, чтобы получить желаемое значение, вы можете создатьотдельный редуктор для каждого значения (т. е. в вашем примере редуктор будет называться data).Это, очевидно, не самый предпочтительный способ сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...