私はこれを数日間苦労してきました。クライアント側でReact(Isomorphic)Linkがレンダリングされないルート
機能:アプリケーションはサーバー側で正常に読み込まれます。 routes/index.jsx(私のサーバー側のルーティングファイル)はページをうまく読み込みます。 console.log('News');
は、クライアントjavascriptコンソールとページロード時のサーバーのノードログの両方にNews
のログを表示します。私は最初に任意のページを読み込むことができます。
問題:ページの読み込み後、ヘッダーのリンクをクリックすると、URLバーのアドレスは変更されますが、UIは更新されず、console.log('Home')
が表示されませんNews
に移動する場合は、ホームに移動します。console.log('News');
はクライアントまたはサーバーで発生しません。
私は以下のファイルを持っています。 WebPACKの
var ReactDOM = require('react-dom');
var React = require('react');
var Routes = require('./routes/routes.jsx');
var Redux = require('redux');
var Provider = require('react-redux').Provider;
function reducer(state) { return state; }
var store = Redux.createStore(reducer, window.PROPS);
ReactDOM.render(
<Provider store={store}>
{Routes}
</Provider>, document.getElementById('root')
);
Routes.JSXのために - - については
ルート/ Index.jsx -
var router = require('express').Router();
var React = require('react');
var ReactDOMServer = require('react-dom/server');
var StaticRouter = require('react-router-dom').StaticRouter;
var Redux = require('redux');
var Provider = require('react-redux').Provider;
var App = require('../views/app.jsx');
function reducer(state) { return state; }
router.get('*', function(req, res) {
var initialState = { title: 'Home' };
const store = Redux.createStore(reducer, initialState);
var context = {};
var html = ReactDOMServer.renderToString(
<Provider store={store}>
<StaticRouter location={req.url} context={context}>
{require('../views/app.jsx')}
</StaticRouter>
</Provider>
);
var windowprops = store.getState();
windowprops = JSON.stringify(windowprops).replace(/</g, '\\u003c');
var frame = '<!DOCTYPE html><html><head><link rel="stylesheet" type="text/css" href="/css/layout.css" /><title>'+store.getState().title+' | Lunar Realm</title></head><body><div id="root">'+html+'</div><script>window.PROPS = '+windowprops+'</script><script src="/bundle.js"></script></body></html>';
if(context.status >= 400) {
res.status(context.status).send(frame);
} else if (context.url) {
res.redirect(context.status, context.url);
} else {
res.send(frame);
}
});
module.exports = router;
ビュー/ app.jsx
var React = require('react');
var ReactRouter = require('react-router-dom');
var Route = ReactRouter.Route;
var Layout = require('../views/Layout.jsx');
var Redirect = ReactRouter.Redirect;
var Switch = ReactRouter.Switch;
module.exports = (
<Layout>
<Switch>
<Route exact path='/' component={require('./Index.jsx')} />
<Route exact path='/news' component={require('./News.jsx')} />
</Switch>
</Layout>
);
Client.JSをレンダリングサーバー側フロントエンドルーティング
var React = require('react');
var ReactRouter = require('react-router-dom');
var BrowserRouter = ReactRouter.BrowserRouter;
var Router = ReactRouter.Router;
var Route = ReactRouter.Route;
var Redirect = ReactRouter.Redirect;
var Switch = ReactRouter.Switch;
var Layout = require('../views/Layout.jsx');
import createHistory from 'history/createBrowserHistory';
var history = createHistory();
module.exports = (
<BrowserRouter>
<Layout>
<Switch>
<Route exact path="/" component={require('../views/Index.jsx')} />
<Route exact path='/news' component={require('../views/News.jsx')} />
<Route component={require('../views/404.jsx')} />
</Switch>
</Layout>
</BrowserRouter>
);
の
ビューは/ News.jsx - レイアウト
var React = require('react');
var News = React.createClass({
render: function(){
console.log('news');
return(
<div id="canvas-section-news" className="canvas-section">
News
</div>
);
}
});
module.exports = News;
の子は誰もが私のUIが更新されない理由を私は把握助けてもらえますか?私は自分のノードのログやブラウザのjavascriptコンソールにエラーがないことに注意してください。
"dependencies": {
"babel-loader": "^6.4.1",
"babel-plugin-transform-class-properties": "^6.23.0",
"babel-plugin-transform-runtime": "^6.23.0",
"babel-polyfill": "^6.23.0",
"babel-preset-es2015": "^6.24.0",
"babel-preset-react": "^6.23.0",
"babel-preset-stage-0": "^6.22.0",
"babel-register": "^6.24.0",
"express": "^4.15.2",
"history": "^4.6.1",
"mongoose": "*",
"react": "^15.4.2",
"react-dom": "^15.4.2",
"react-redux": "^5.0.3",
"react-router": "^4.0.0",
"react-router-dom": "^4.0.0",
"redux": "^3.6.0",
"webpack": "^2.3.3"
}