Когда действие отправляется, состояние другого редуктора удаляется. Почему?

#javascript #reactjs #redux

#javascript #reactjs #redux

Вопрос:

Я впервые использую Redux в своем проекте. У меня есть несколько редукторов и действий. При отправке первого действия состояние изменяется. Все выглядит нормально. После отправки второго действия состояние снова изменяется, но предыдущие изменения удаляются. Я имею в виду, что при отправке ‘FETCH_COMPANY_INFORMATIONS’ изменяется CompanyName и companyDesc устанавливается в начальное значение. Затем отправляется ‘FETCH_INITIAL_MEMBER’ и удаляется CompanyName, но companyDesc все еще существует, и полезные нагрузки участника также изменяются. В чем моя ошибка? Спасибо.

Я перепробовал много способов решить эту проблему, но все еще продолжаю. Я проверяю это в Redux DevTools.

memberReducer

 const initialState = {
  username: '',
  companyId: '',
  isAdmin: '',
  photo: '',
};
export default (state = initialState, action) => {
  switch (action.type) {
    case FETCH_INITIAL_MEMBER:
      return {
        ...state,
        username: action.payload.username,
        companyId: action.payload.companyId,
        isAdmin: action.payload.isAdmin,
      };

    default:
      return state;
  }
};
  

companyReducer

 const initialState = {
  companyName: 'companyName',
  companyDesc: 'companyDesc',
};
export default (state = initialState, action) => {
  switch (action.type) {
    case FETCH_COMPANY_INFORMATIONS:
      return {
        ...state,
        companyName: action.payload.companyName,
      };

    default:
      return state;
  }
};
  

memberAction

 const fetchInıtıalMember = async muuid => {
  axios
    .get(`/api/member/${muuid}`)
    .then(response => {
      const username = response.data.mname;
      const isAdmin = response.data.misAdmin;
      const companyId = response.data.cid;

      store.dispatch({
        type: FETCH_INITIAL_MEMBER,
        payload: {
          username,
          isAdmin,
          companyId,
        },
      });
    })
    .catch(error => {});
};
  

companyAction

 const fetchCompanyInformations = () => {
  store.dispatch({
    type: FETCH_COMPANY_INFORMATIONS,
    payload: { companyName: 'dispacthedCompanyName' },
  });
};
  

Редактировать:
Приведенный выше код верен. Моя ошибка заключается в импорте констант. Эта реализация Redux работает хорошо. Я сохранял все константы типа действия в types.js файл. Я неправильно импортирую константы этого типа в другие файлы. После его изменения моя проблема решена.

Комментарии:

1. каковы строковые значения FETCH_INITIAL_MEMBER и FETCH_COMPANY_INFORMATIONS ?

2. @Jamie-FenrirDigitalLtd Это просто строковые константы для типа действия. Я храню их в types.js файл const FETCH_INITIAL_MEMBER = 'FETCH_INITIAL_MEMBER'; const FETCH_COMPANY_INFORMATIONS = 'FETCH_COMPANY_INFORMATIONS';

3. круто, и я предполагаю, что вы используете combineReducers для объединения двух в одно?

4. Да, вот так export default combineReducers({ member: memberReducer, company: companyReducer, auth: authReducer, });

5. ОК. причина, по которой я спрашиваю все это, заключается в том, что кажется, что оба случая перехватываются одновременно, что заставляет меня думать, что они отправляют строку одного типа. Не могли бы вы также добавить свои функции действия к вопросу, пожалуйста?