Redux расщепление редукторов - экспорт нескольких в одном файле - PullRequest
0 голосов
/ 29 апреля 2019

Я пытаюсь получить форму состояния, подобную этой:

state = {
  items: {
    currentItem: object,
    byId: object,
    allIds: array,
    fetching: bool
  },
  someOtherModule = { ... }
}

Я разбил свои редукторы предметов на два файла, стараясь, чтобы все не было в одном файле; обратите внимание, что это просто псевдокод, чтобы проиллюстрировать, что я делаю -

товар / редукторы / currentItem.js

const currentItem = (state = null, action) => ...
export default currentItem;

Я пробовал это так:

товар / редукторы / items.js

const byId = (state = {}, action) => ...
const allIds = (state = [], action) => ...
const fetching = (state = false, action) => ...
export default {byId, allIds, fetching};

элементы / редукторы / index.js

import { combineReducers } from 'redux';
import item from './item';
import currentItem from './currentItem';

export default combineReducers({ item, currentItem });

И я пробовал это так:

элементы / редукторы / items.js

export const byId = (state = {}, action) => ...
export const allIds = (state = [], action) => ...
export const fetching = (state = false, action) => ...

товар / редукторы / index.js

import { combineReducers } from 'redux';
import * as item from './item';
import currentItem from './currentItem';

export default combineReducers({ item, currentItem });

И я получаю «редуктор корневых элементов», который имеет только currentItem, но не «items».

Если я экспортирую combineReducers({byId, allIds, fetching}) в items.js, это работает, но добавляет уровень в мое состояние:

state = {
      items: {
        currentItem: object,
        items: { 
         byId: object,
         allIds: array,
         fetching: bool
        }
      },

1 Ответ

0 голосов
/ 29 апреля 2019

разобрался; считается, что объект, ключи которого являются именами редуктора, а значения являются функциями редуктора (TLDR - см. руководство):

элементы / редукторы / items.js

export const byId = (state = {}, action) => ...
export const allIds = (state = [], action) => ...
export const fetching = (state = false, action) => ...

товар / редукторы / index.js

import { combineReducers } from 'redux';
import { byId, allIds, fetching } as item from './item';
import currentItem from './currentItem';

export default combineReducers({ byId, allIds, fetching, currentItem });

Думаю, я все верну в один файл, так проще.

...