Как CombineReducers знают, какой срез передать REDUX - PullRequest
1 голос
/ 03 февраля 2020

Я немного запутался в том, как ОбъединениеReducers будет передавать редукторам их необходимый кусок состояния.

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

{
    products: [somedata],
    comments: [somedata]
}

и у меня есть 2 редуктора для обработки изменений в них (1-productReducer, 2-commentReducer)

в моем root редукторе у меня есть

const rootReducer = combineReducer(
    products: productReducer,
    comments: commentReducer
)

Давайте представим, что продукты и комментарии - это две разные вещи и не имеют никакой связи вместе, и я хочу просто передать state.products productReducer и state.comment, чтобы commentReducer. Это так очевидно, мне не нужны комментарии в productReducer. Но как это combineReducer справится с этим?!

Если я захочу это сделать, я напишу:

function rootReducer(state, action) {
    products: productReducer(state.products),
    comments: commentReducer(state.comments)
}

Но мне интересно, combineReducer даже заботится о нарезке данных и их передаче подходящему редуктору.

Ответы [ 2 ]

1 голос
/ 03 февраля 2020

Я вижу, что люди ссылаются на исходный код или документацию, но, возможно, простое объяснение поможет вам понять.

Когда вы вызываете объединяющие редукторы, каждый редуктор возвращает свой начальный фрагмент p ie объединить редукторы просто берет этот фрагмент p ie и сохраняет его на карте с тем же именем, на которое зарегистрирован редуктор; когда отправляется действие, он просто берет фрагмент, который был сохранен для каждого редуктора, и передает это снова для создания следующего состояния.

, который вы вызываете:

combineReducers({
  foo: fooReducer,
  bar: barReducer,
})

внутренне состояние сохраняется:

combinedState = {
  foo: fooState, // the state returned by the initial call to the foo reducer
  bar: barState, // the state returned by the initial call to the bar reducer 
}

когда отправляется действие, что-то как это происходит:

combinedState = {
  foo: fooReducer(fooState, action), // generate the next state
  bar: barReducer(barState, action), // generate the next state
}
0 голосов
/ 03 февраля 2020

combineReducer(products: productReducer, comments: commentsReducer), создаст один объект состояния и будет различать его, используя переданные ему ключи (продукты, комментарии).

rootReducer = combineReducer(products: productReducer, comments: 
commentsReducer);
   // This would produce the following state object
  {
  products: {
   // ... products, and other state managed by the productReducer ...
  },
  comments: {
   // ... comments, and other state managed by the commentsReducer
  }
}

Здесь это понятие определено.

Обновление:

combineReducer вызывает все редукторы, которые обертываются с отправленным действием, давая редукторам шанс ответить. Пожалуйста следуйте .

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