首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >响应Redux路由器错误

响应Redux路由器错误
EN

Stack Overflow用户
提问于 2016-11-30 08:17:42
回答 2查看 638关注 0票数 5

我正在尝试安装一个Redux + React路由器应用程序。我认为问题在于ImmutableJS,但我不知道如何解决它。

client.js

代码语言:javascript
复制
import { fromJS } from 'immutable'
import React from 'react'
import { render, unmountComponentAtNode } from 'react-dom'
import { AppContainer } from 'react-hot-loader'

import { Provider } from 'react-redux'
import { match, Router, browserHistory } from 'react-router'
import { syncHistoryWithStore } from 'react-router-redux'

import { createStore, combineReducers, compose, applyMiddleware } from 'redux'
import { routerReducer, routerMiddleware } from 'react-router-redux'

function createSelectLocationState(reducerName) {
  let prevRoutingState;
  let prevRoutingStateJS;

  return (state) => {
    const routingState = state.get(reducerName); // or state.routing

    if (!routingState.equals(prevRoutingState)) {
      prevRoutingState = routingState;
      prevRoutingStateJS = routingState.toJS();
    }

    return prevRoutingStateJS;
  };
}

function configureStore(history, initialState) {
  const reducer = combineReducers({
    routing: routerReducer
  });

  return createStore(
    reducer,
    initialState,
    compose(
      applyMiddleware(
        routerMiddleware(history)
      )
    )
  );
}

const initialState = fromJS(window.__INITIAL_STATE__);
const store = configureStore(browserHistory, initialState);
const history = syncHistoryWithStore(browserHistory, store, {
  selectLocationState: createSelectLocationState('routing')
});
const rootNode = document.getElementById('root');

const renderApp = () => {
  const routes = require('./routes');

  match({ history, routes }, (error, redirectLocation, renderProps) => {
    render(
      <AppContainer>
        <Provider store={store}>
          <Router {...renderProps} />
        </Provider>
      </AppContainer>,
      rootNode
    );
  });
};

// Enable hot reload by react-hot-loader
if (module.hot) {
  const reRenderApp = () => {
    try {
      renderApp();
    } catch (error) {
      const RedBox = require('redbox-react').default;

      render(<RedBox error={error} />, rootNode);
    }
  };

  module.hot.accept('./routes', () => {
    setImmediate(() => {
      // Preventing the hot reloading error from react-router
      unmountComponentAtNode(rootNode);
      reRenderApp();
    });
  });
}

renderApp();

我知道这个错误:

Uncaught : state.get不是函数

state中,这个对象

我用"react": "^15.3.2""redux": "^3.6.0""react-router": "^3.0.0"

更新1我现在使用来自redux-immutablecombineReducers

代码语言:javascript
复制
import {combineReducers} from 'redux-immutable'

但是得到一个错误:

Uncaught : routingState.equals不是函数

在此:

更新2

我修正了上面的问题,但是还有一个错误

我在存储库中发布的所有代码

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-12-09 10:07:29

问题仍然存在于src/index.js文件和route.js的require语句中。

当您使用具有require es6模块的default时,您必须使用required模块中的默认值。就像,

代码语言:javascript
复制
const routes = require('./routes').default;

这解决了你的问题,没有任何其他改变你的git回购。

票数 1
EN

Stack Overflow用户

发布于 2016-11-30 09:57:16

您使用的combineReducers不使用immutable。通过设置immutable,每个分支都是fromJS(blah),但不是在状态的最高级别上。使用redux-immutable代替:

import {combineReducers} from 'redux-immutable';

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/40883357

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档