我正在研究 React with Redux 以重写我们的产品。使用 Redux-Toolkit https://redux-toolkit.js.org/清除了 Redux 周围的许多迷雾。然后发现 React-Router 让状态管理变得乱七八糟,在 redux-first-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 store 时,我都会在浏览器中得到一个异常:
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.
PROFILE: { path: "/profile/:username", thunk: fetchUserData }
如果路由具有定义为这样的“thunk”属性,我可以看到这源于路由定义:
如果我将 thunk 属性更改为可序列化的值(或删除它),错误就消失了。现在不知何故,thunk 被添加到操作的有效负载中以更新路径。什么...?
该怎么办?好的,我可以让它与传统的 Redux 设置一起使用,但由于我是 redux 工具包的忠实粉丝,它对我来说会很不错,也许还有更多人可以让它与工具箱一起使用。