Я пытаюсь выучить Redux. У меня есть это действие, которое выбирает данные:
export const FETCH_SUCCESS = "FETCH_SUCCESS";
import axios from "axios";
export const fetchData = () => {
return async dispatch => {
try {
const result = await axios(
`url`
);
dispatch({ type: FETCH_SUCCESS, payload: { result } });
} catch (error) {
console.log(error);
}
};
};
И этот редуктор:
import { FETCH_SUCCESS } from "../actions/mainCategories";
const initialState = {
mainCategories: []
};
const mainCategoriesReducer = (state = initialState, action) => {
switch (action.type) {
case FETCH_SUCCESS:
return { data: action.payload.result.data };
default:
return state;
}
};
export default mainCategoriesReducer;
Я использую это дважды, один для mainCategories и точно такой же код для моих подкатегорий, но в разных файлы, чтобы я мог объединить его в приложении. js следующим образом:
import mainCategoriesReducer from "./store/reducers/mainCategories";
import subCategoriesReducer from "./store/reducers/subCategories";
const rootReducer = combineReducers({
mainCategories: mainCategoriesReducer,
subCategories: subCategoriesReducer,
});
const store = createStore(rootReducer, applyMiddleware(ReduxThunk));
Я обертываю провайдера с сохраненным хранилищем вокруг моего приложения:
<Provider store={store}>
<App />
</Provider>
В компонентах Я использую это так:
import { fetchData } from "../store/actions/mainCategories";
const mainCategories = useSelector(state => state.mainCategories);
useEffect(() => {
dispatch(fetchData());
}, [dispatch]);
И то же самое для подкатегорий, но с соответствующими импортами и состояниями (state.subCategories)
Все работает, как ожидалось. Когда приложение загружается, оно выбирает мои основные категории. Я могу перейти к своим подкатегориям, но когда я go вернусь, основные категории будут перезаписаны подкатегориями.
Похоже, что combReducers объединяет / перезаписывает вместо создания различных состояний. Что я делаю неправильно? Спасибо