Reactjs React工具包和redux第一路由器

Reactjs React工具包和redux第一路由器,reactjs,redux,redux-router,redux-toolkit,Reactjs,Redux,Redux Router,Redux Toolkit,我正在深入研究React with Redux以重写我们的产品。 使用Redux工具包清除了Redux周围的大量雾。 然后我发现React路由器使状态管理变得混乱,并在redux first路由器中找到了解决方案 现在我想结合这些优秀的库。但我认为我在配置上做错了什么。 这是代码。从上的一个沙盒示例开始,我将configureStore.js文件更改为(为简单起见,我省略了用户缩减器的代码) 但是现在每次更新route=Redux存储中的更改时,我都会在浏览器中看到一个异常: index.js:

我正在深入研究React with Redux以重写我们的产品。 使用Redux工具包清除了Redux周围的大量雾。 然后我发现React路由器使状态管理变得混乱,并在redux first路由器中找到了解决方案

现在我想结合这些优秀的库。但我认为我在配置上做错了什么。 这是代码。从上的一个沙盒示例开始,我将configureStore.js文件更改为(为简单起见,我省略了用户缩减器的代码)

但是现在每次更新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属性更改为可序列化的值(或将其删除),则错误消失。 不知何故,现在thunk被添加到操作的有效负载中以更新路径。什么


怎么办?好的,我可以使用传统的Redux设置,但由于我是Redux工具箱的忠实粉丝,我和其他一些人都可以使用它。我是Redux的维护者和Redux工具箱的创建者

基于该错误消息并读取Redux First路由器源代码,它看起来像库。这是一个问题,因为我们专门指导用户

默认情况下,Redux Toolkit会在状态或操作中检测到不可序列化的值时向您发出警告,以帮助您避免意外地犯下此错误

这是可能的。目前有一个
ignoredActions
选项,但我不认为我们可以忽略状态树的特定部分。所包含的
redux immutable state invariant
中间件确实为部分状态提供了一个
ignore
选项,因此也许我们可以添加这种方法

我添加了一个选项,看看是否可以添加这样的选项

同时,您可以通过调用
getDefaultMiddleware({serializableCheck:false})
关闭中间件

更新

我刚刚发布了,它向序列化性检查中间件添加了一个
ignoredPaths
选项,以允许忽略状态中的特定键路径


再次,请注意,这纯粹是一个用于解决行为不端的库的逃生舱,不应作为常规方法使用。

非常感谢您花时间处理我的问题。是的,你几乎是对的。我对Redux First Router进行了一些研究,据我所知,数据结构RouteObject从未用作操作的有效负载。但是,库的消费者正在设置的路由表me as I存储在Redux中。我将与Redux First路由器维护者一起提出这个问题,看看在Redux外部存储路由表是否没有问题。再次感谢,非常感谢您在Redux工具包上所做的所有工作。根据我的判断,Redux有了巨大的改进。事实上,我现在意识到它在Redux First Router中是一个问题,希望在下一个版本中得到处理。出于好奇,你所谈论的问题的链接是什么?我在RFR问题列表中看不到任何相关内容。在这里。已结束的问题。
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.