Какой редуктор используется при использовании отправки в mapDispatchToProps?

Я изучаю Redux, и у меня есть два редьюсера: contactReducer для отображения контактов на странице и testReducer, с которым можно просто возиться. В одном из моих файлов компонентов у меня есть эта функция:

const mapDispatchToProps = (dispatch) => ({
  getContacts: () => dispatch({ type: "TEST_ACTION" }),
});

Это два моих файла редуктора: contactReducer:

import { GET_CONTACTS } from "../actions/types";

const initialState = {
  contacts: [
    {
      id: 1,
      name: "John Doe",
      email: "[email protected]",
      phone: "555-555-5555",
    },
    {
      id: 2,
      name: "Karen Williams",
      email: "[email protected]",
      phone: "444-444-4444",
    },
    {
      id: 3,
      name: "Henry Johnson",
      email: "[email protected]",
      phone: "333-333-333",
    },
  ],
};

export default function (state = initialState, action) {
  switch (action.type) {
    case GET_CONTACTS:
      return {
        ...state,
      };
    default:
      console.log("testing action in contactReducer");
      return state;
  }
}

и тестредьюсер:

import { GET_CONTACTS } from "../actions/types";

const initialState = {
  contactsTest: [
    {
      id: 1,
      name: "ffffffffffff",
      email: "[email protected]",
      phone: "555-555-5555",
    },
    {
      id: 2,
      name: "ggggggggggggg",
      email: "[email protected]",
      phone: "444-444-4444",
    },
    {
      id: 3,
      name: "aaaaaaaaaaaaaa",
      email: "[email protected]",
      phone: "333-333-333",
    },
  ],
};

export default function (state = initialState, action) {
  switch (action.type) {
    case "TEST_ACTION":
      return {
        ...state,
      };
    default:
      console.log("testing action");
      return state;
  }
}

Итак, что я заметил из операторов console.log в файлах редуктора, так это то, что для каждого контакта функция contactReducer и testReducer вызывалась с этой строкой:

  getContacts: () => dispatch({ type: "TEST_ACTION" }),
});

Что, если у меня есть несколько редьюсеров, но я хочу вызвать только одну из их функций для отправки, что мне делать?


person mastercool    schedule 02.06.2020    source источник
comment
type вашего действия должно быть уникальным для всех ваших редюсеров. В Redux все редукторы хранилища обрабатывают каждое действие, поэтому случай по умолчанию просто возвращает предыдущее состояние.   -  person cbr    schedule 02.06.2020
comment
ааа ладно тогда это имеет смысл. Я новичок в редуксе, поэтому я подумал, что, возможно, два редуктора могут использовать один и тот же тип действия.   -  person mastercool    schedule 02.06.2020
comment
Вы абсолютно можете это сделать, если оба хранилища должны реагировать на одно и то же действие, просто имейте в виду, что это не то, что вы пытаетесь сделать.   -  person cbr    schedule 02.06.2020
comment
хорошо, большое спасибо за разъяснение этого   -  person mastercool    schedule 02.06.2020
comment
да, конечно!   -  person mastercool    schedule 02.06.2020


Ответы (1)


combineReducers, это вспомогательная функция в редуксе, которая помогает вам разделить ваши редукторы. взгляните на эту ссылку: ССЫЛКА

person Mahdi    schedule 02.06.2020