Redux - отношение редукторов к действиям

Я новичок в реакции / сокращении. Я пытаюсь понять, как взаимодействуют все части в redux. Единственное, что меня беспокоит, - это понимание взаимосвязи между действиями и редукторами. Когда вызывается действие, как магазин узнает, какой редуктор использовать? Полностью ли он основан на названии типа действия? Должны ли имена типов быть уникальными? Кому или чему редуктор передает новый объект состояния: хранилище или действие?

Насколько я понимаю, это выглядит так:

  1. store.dispatch (действие) вызывается
  2. store находит связанный редуктор на основе типа действия
  3. Редуктор клонирует объект текущего состояния, вносит изменения, передает его обратно (где-то)

person steveareeno    schedule 29.11.2016    source источник


Ответы (3)


1: как магазин узнает, какой редуктор использовать -> Это полностью зависит от типа действия.

2: Должны ли имена типов быть уникальными? -> Это не правило. Но в основном да. Каждое действие имеет собственное имя типа, и вызывается соответствующий редуктор.

3: Кому или чему редуктор передает новый объект состояния, хранилище или действие? -> Редюсер нигде не передает новый объект состояния. По сути, он запускает событие изменения состояния для всех ваших реагирующих компонентов, которые его слушают. Все компоненты, прослушивающие измененное состояние, повторно отрисовываются с новой версией состояния, тем самым обновляя вашу DOM.

person Amoolya S Kumar    schedule 29.11.2016
comment
Спасибо. Сейчас я начинаю собирать вещи воедино. - person steveareeno; 30.11.2016

В типичной настройке Redux действия отправляются ВСЕМ редукторам, и редукторы должны решить, заботятся ли они об этом действии. Обычный шаблон - это переключатель в редукторе, который проверяет action.type, имеет случаи для действий, о которых он заботится, и случай по умолчанию, который просто возвращает текущее состояние, например:

export default (state = false, action) => {
  switch (action.type) {
    case START_LOADING:
      return true;
    case STOP_LOADING:
      return false;
    default:
      return state;
  }
}

В этом случае я говорю своему редуктору, что он заботится только о действиях с типом START_LOADING или STOP_LOADING и что во всех остальных случаях он должен просто возвращать предыдущее состояние.

Для хорошего понимания Redux (и Flux) я предлагаю вам ознакомиться с мультфильмами кода Лин Кларк или ее < href = "https://www.youtube.com/watch?v=WIqbzHdEPVM" rel = "noreferrer"> video, в котором рассказывается о большинстве тех же вещей.

person TheZanke    schedule 29.11.2016

Как правило, за полное состояние отвечает только один редуктор.

Этот редуктор может быть разделен на несколько меньших функций редуктора, каждая из которых отвечает за свой сегмент состояния. Например, combineReducers() утилита Redux может это сделать, но вы также можете сделать это с помощью рука.

Если вы используете combineReducers(), каждая из функций редуктора выполняется для каждого отправленного действия. Затем они решают исключительно на основе типа действия, должно ли действие влиять на его часть состояния. Если да, возвращается обновленная копия этого фрагмента. Если действие не влияет на его срез, он возвращается без изменений.

person TimoStaudinger    schedule 29.11.2016
comment
Что делать, если между конкретным редуктором и его действием существует изолированная связь, так что каждый раз, когда действие отправляется, action.type сопоставляется только с случаями внутри соответствующего редуктора вместо сопоставления типа со всеми редукторами, представленными rootReducer внутри комбайнReducers (). Пожалуйста, объясните это. Заранее благодарим. - person Ibad Shaikh; 03.11.2020