Обмен данными между редукторами слайсов при использовании createReducer - PullRequest
3 голосов
/ 02 мая 2020

У меня есть приложение ReactJS в TypeScript с redux, и я использую redux-toolkit для создания своих редукторов. Поскольку приложение стало больше, я хочу начать рефакторинг своих редукторов.

Мое состояние редукса выглядит следующим образом:

{
  customers: Customers[],
  orders: {
    state1: SomeIndependentState1,
    state2: SomeIndependentState2,
    state3: SomeDependentState2,
    state4: SomeDependentState3,
  }
}

Срезы customers и orders независимы и Я могу легко написать для них два отдельных редуктора, объединив их с combineReducers позже.

Теперь я хочу еще больше сломать свой редуктор orders.

  • state1 и state2 полностью независимы.
  • state3 зависит от данных state1.
  • state4 зависит от данных state1 и state2.

Есть ли способ продолжать использовать createReducer из redux-toolkit (или некоторые другие функции из набора инструментов) для создания редукторов для каждого вложенного среза в пределах orders среза?

Как я начал переписывать мой редуктор для orders, вот что у меня есть:

export const ordersReducer = (state: Orders, action: AnyAction) => {
  return {
    state1: state1Reducer(state?.state1, action),
    state2: state2Reducer(state?.state2, action),
    state3: {}, // not sure how to write a reducer for this slice and satisfy its dependency on state1
    state4: {}, // not sure how to write a reducer for this slice and staisfy its dependency on state1 and state2
  }
};

const initialState1: State1 = {};
export const state1Reducer = createReducer(initialState1, (builder) => 
  builder
    .addCase(...)
    .addCase(...)
);

const initialState2: State2 = {};
export const state2Reducer = createReducer(initialState2, (builder) => 
  builder
    .addCase(...)
    .addCase(...)
);

Примечание: я не контролирую структуру моего состояния редукции. Я не полностью привязан к использованию redux-toolkit, но мне нужно хорошее обоснование, чтобы моя команда отошла от него.

...