Я копаюсь в React с Redux, чтобы переписать наш продукт. Много тумана вокруг Redux было рассеяно с помощью Redux-Toolkit https://redux-toolkit.js.org/. Затем я обнаружил, что React-Router запутал управление состоянием, и нашел решение в https://github.com/faceyspacey/redux-first-router.
Теперь я хочу объединить эти прекрасные библиотеки. Но мне кажется, что я что-то не так делаю в конфигурации. Вот код. Начиная с примера песочницы в https://codesandbox.io/s/m76zjj924j, я изменил configureStore .js файл (для простоты я пропустил код для пользовательского редуктора)
import { connectRoutes } from 'redux-first-router';
import { configureStore, getDefaultMiddleware } from '@reduxjs/toolkit'
import { routePaths } from '../routes';
const { reducer: location } = connectRoutes(routePaths);
const {
middleware: routerMiddleware,
enhancer: routerEnhancer,
initialDispatch
} = connectRoutes(routePaths, { initialDispatch: false });
export default function configureRouteStore() {
const store = configureStore({
reducer: {
location: location
},
middleware: [...getDefaultMiddleware(), routerMiddleware],
enhancers: (defaultEnhancers) => [routerEnhancer, ...defaultEnhancers]
})
initialDispatch();
return store;
}
Но теперь каждый раз, когда изменяется изменение в магазине route = Redux, я получаю исключение в браузере:
index.js:1 A non-serializable value was detected in the state, in the path: `location.routesMap.PROFILE.thunk`. Value: dispatch => {
dispatch(USER_DATA_LOADED({
avatar: null
}));
const avatar = `https://api.adorable.io/avatars/${Math.random()}`;
setTimeout(() => {
// fake async call
dispatch(USER_…
Take a look at the reducer(s) handling this action type: HOME.
Я вижу, что это происходит из определений маршрутов, если у маршрута есть свойство thunk, определенное следующим образом: PROFILE: { path: "/profile/:username", thunk: fetchUserData }
,
Если я изменю свойство thunk на сериализуемое значение (или удалю его), ошибка исчезнет. Каким-то образом теперь преобразователь добавляется в полезную нагрузку действия для обновления путей. Какие...?
Что делать? Хорошо, я могу заставить его работать с традиционной настройкой Redux, но поскольку я большой поклонник набора инструментов redux, мне и, возможно, еще нескольким людям было бы приятно заставить его работать с набором инструментов.