私はコンポーネントを反応させるデータを渡すことができ豆をしました:のようにサーバー側でそれらをレンダリングする際のデータとコンポーネントをレンダリングする方法
app.get('/', function (req, res, next) {
var reactHtml = ReactDOMServer.renderToString(component({data}));
res.render('index.jade', {reactOutput: reactHtml});
});
今私がしましたchangetそれに
server.js:
app.get('*', (req, res) => {
// match the routes to the url
match({ routes: routes, location: req.url }, (err, redirect, props) => {
props.data = {q:123};
const appHtml = ReactDOMServer.renderToString(routerContext(props));
res.render('index.jade', {reactOutput: appHtml});
})
});
ルーターのコンテキスト
module.exports = React.createClass({
render: function(){return(<RouterContext {...this.props} />)}
});
とルート
module.exports = (
<Route path="/" component={App} {...this.props}>
<IndexRoute component={List}/>
<Route path="/about" component={About}/>
</Route>
);
App.jsx
var App = React.createClass({
render: function() {
console.log(this.props);
return (
<div id="app-root" className="container">
<Nav/>
<h1>{this.props.q}</h1>
{this.props.children}
<div className="Row">
<div className="footer col-lg-12"></div>
</div>
</div>
)
}
});
だから、例えば私は私のアプリのコンポーネントで、この時点props.data = {q:123};
からデータを取得行いたいが、私はアプリケーションコンポーネントでconsole.log(this.data);
を行う際の方法をレンダリングI歴史、場所などがありますが、私のデータはありません。とにかくデータ{q:123}
をserver.jsロジックのコンポーネント(AppまたはListまたはAbout)の小道具に渡すことはありますか?
あなたはあなたのデータをシリアル化し、initialState
として、あなたのルートコンポーネントにそれを渡した場合、たとえば、レンダリングサーバ上のページに追加する必要があり
ありがとうございました。私はデモをチェックした。それは私が必要とするものを正確に行うように見えます。私は情報源を読むために数時間を費やさなければならない。実際に私は反応ルートのソースを読んでフォークするパスを見つけ、RouterContextのgetChildContext関数を修正して、子コンテキストに追加データを転送させました。しかし、あなたのやり方はもっと納得のいくものになっています。 – xander27
いや、これはもっと「ハック」だと思うでしょう。動的コンテンツにreduxストアのようなものを使用するのは本当に簡単です。初期サーバーをレンダリングしたい場合は、[this](https://github.com/choonkending/react-webpack-node/blob/master/app/api/fetchComponentDataBeforeRender.js)のようなものを追加して、約束を解決することができますレンダリングする前にカスタムデータ用に、あなたはまだすべてのSEOのプロを取得する – PijusV