Я столкнулся с тем же вопросом.
Я новичок в узел, но если проверить папку node_modules, а также react-router v4 documentation, нет никакого упоминания о классе ServerRouter, как один называется в client.js файл.
Возможно, создается функция createServerRenderContext. По крайней мере, не в этом модуле.
Попробуйте заменить это на StaticRouter возможно.
EDIT:
Успел сделать его работу, установив последнюю версию ReactRouter 4 беты
npm install --save [email protected]
npm install --save [email protected]
Затем измените файл server.js:
import React from 'react';
import ReactDOMServer from 'react-dom/server';
import {StaticRouter} from 'react-router';
import {createStore, applyMiddleware} from 'redux';
import thunkMiddleware from 'redux-thunk';
import {Provider} from 'react-redux';
import serialize from 'serialize-javascript';
import reducer from './reducers';
import App from 'components/App';
window.render = (template, model) => {
const context = {};
const req = JSON.parse(model.get('req'));
const initialState = JSON.parse(model.get('initialState'));
const store = createStore(reducer, initialState, applyMiddleware(thunkMiddleware));
const markup = ReactDOMServer.renderToString(
<Provider store={store}>
<StaticRouter location={req.location} context={context}>
<App/>
</StaticRouter>
</Provider>
);
return template
.replace('SERVER_RENDERED_HTML', markup)
.replace('SERVER_RENDERED_STATE', serialize(initialState, {isJSON:true}));
};
клиент .js с:
import React from 'react';
import ReactDOM from 'react-dom';
import {BrowserRouter} from 'react-router-dom';
import {createStore, applyMiddleware} from 'redux';
import thunkMiddleware from 'redux-thunk';
import {Provider} from 'react-redux';
import reducer from './reducers';
import App from 'components/App';
const store = createStore(reducer, window.__PRELOADED_STATE__, applyMiddleware(thunkMiddleware));
const markup = (
<Provider store={store}>
<BrowserRouter>
<App/>
</BrowserRouter>
</Provider>
);
ReactDOM.render(markup, document.getElementById('app'));
И, наконец, App.js
import React from 'react';
import {Route, Link} from 'react-router-dom';
import Home from 'components/Home';
import Child from 'components/Child';
import 'styles/main.css';
export default function App() {
return (
<div>
<h1>Hello Server Side Rendering!!</h1>
<ul>
<li><Link to="/">{'Home'}</Link></li>
<li><Link to="/child">{'Child'}</Link></li>
</ul>
<Route exactly path="/" component={Home}/>
<Route path="/child" component={Child}/>
</div>
);
}
Я удалил объект мисс, так как не существует в этой версии среагировать-маршрутизатор
Спасибо за ответ! Я уже использовал вашу статью для своей настройки. Проблема заключается в том, что приложение, которое должно быть обработано сервером, использует response-router v3, что вызывает несколько проблем. Спасибо за помощь, хотя! –