重置Redux存储的状态,导致使用React Router的不存在的选择器

时间:2017-12-09 17:58:32

标签: redux react-router react-redux react-router-redux

我在尝试重置路由时重置Redux状态时遇到了很多问题。 输入 routeA 并点击浏览器历史记录到 routeB ,在 routeB 触发 @@ router / LOCATION_CHANGE 后,它会执行错误 routeA 的选择器会导致各种未定义的状态错误。

它不应该运行 routeA选择器,因为我进入 routeB ,我相信这是问题,但我不知道如何解决它

有些甚至碰巧在州内显示重复的密钥,有时候我试图重置错误的状态。

我的风景

  • 在反应路由器的onEnter上执行replaceReducers,请参阅:

我的路线输入回传:

function onEnter() {
  replaceReducers({ book, dragAndDrop })
}

replaceReducers:

function replaceReducers(reducers) {
  const appReducers = combineReducers({ ...reducers, ...defaultReducers })

  store.replaceReducer((state, action) => {
    if (action.type === 'RESET_STORE') {
      const { routing, application } = state

      state = { routing, application }
    }

    return appReducers(state, action)
  })

  store.dispatch({ type: 'RESET_STORE' })
  apollo.setStore(store)
}

我遵循的步骤以及发生错误的原因:

  • 输入 routeA ;
  • 转到 routeB ;
  • 点击浏览器历史记录 routeA ;
  • routeB 调用不正确;

控制台出错:

Uncaught TypeError: Cannot read property 'get' of undefined in routeB-selector.js

getItems: book => book.get('items')

无法调用此 routeB 选择器,并且某些内容已自动运行。

请帮帮我......

0 个答案:

没有答案