使用 connectedRouter 时 Redux 中出现意外的键、“长度”、“动作”、“位置”等

Posted

技术标签:

【中文标题】使用 connectedRouter 时 Redux 中出现意外的键、“长度”、“动作”、“位置”等【英文标题】:Unexpected keys, "length", "action", "location" etc in Redux when using connectedRouter 【发布时间】:2020-01-11 16:07:08 【问题描述】:

我正在尝试编写一个 React 应用程序并且我正在尝试使用 ConnectedRouter:

https://github.com/supasate/connected-react-router

它是 React Router 的 Redux 绑定。

我收到以下错误:

现在我认为这可能与这个问题的公认答案有关:

Redux: Unexpected key found in preloadedState argument passed to createStore

但与尝试传递默认值时不同的是,我实际上可能希望在我的组合减速器中使用这些。

这是我在 reducers/index.js 中的当前代码:

export default history =>
  combineReducers(
    router: connectRouter(history),
    search,
    profile,
    color,
    categories,
    coordinates: LocationReducer,
    idprovider,
    firstFavorite,
    analytics,
    sidebar,
    messages,
    total_messages,
    onesignal,
    tokens
  );

在我的 store.js 中:

import createRootReducer from "./reducers/index";

我不太确定这里的正确解决方案是什么,因为 ConnectedRouter 似乎没有对这些值做任何事情。

什么是正确的解决方案?

【问题讨论】:

【参考方案1】:

编辑:在下面的示例中,我使用了 connected-react-router v4 中使用的语法,但我的示例肯定是错误的。 v5/v6 的使用有更新,如果您使用的是 version>=5,请尝试将我的示例迁移到其中: https://github.com/supasate/connected-react-router/blob/master/FAQ.md#how-to-migrate-from-v4-to-v5v6

您可能没有正确初始化存储。 试试这个:

reducers/index.js

export default combineReducers(
   // router reducer will be added automatically by connectRouter in store.js
    search,
    profile,
    color,
    categories,
    coordinates: LocationReducer,
    idprovider,
    firstFavorite,
    analytics,
    sidebar,
    messages,
    total_messages,
    onesignal,
    tokens
  );

store.js

import connectRouter, routerMiddleware from 'connected-react-router';
import createBrowserHistory from 'history';
import reducers from './reducers';

const history = createBrowserHistory(history);

const store = createStore(
    connectRouter(history)(reducers),
    applyMiddleware(routerMiddleware(history))
);

【讨论】:

以上是关于使用 connectedRouter 时 Redux 中出现意外的键、“长度”、“动作”、“位置”等的主要内容,如果未能解决你的问题,请参考以下文章

connectedRouter 错误:在状态树中找不到路由器减速器,它必须安装在“路由器”下

connectedRouter 错误:在状态树中找不到路由器减速器,它必须安装在“路由器”下

ConnectedRouter A 可能只有一个子元素但它有一个子元素

已连接路由器 - 新路由的页面包含附加数据

cisco4507引擎模式切换

训练 LSTM 时跑出 Ram