#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. ОК. причина, по которой я спрашиваю все это, заключается в том, что кажется, что оба случая перехватываются одновременно, что заставляет меня думать, что они отправляют строку одного типа. Не могли бы вы также добавить свои функции действия к вопросу, пожалуйста?