についての詳細を学ぶことができるレンダリングサーバーが付属しています。
locals
たとえば、さまざまなページメタデータを持つオブジェクト。 title
は、コンポーネントパラメータ(従来はテンプレート変数と考えられていました)に入ります。
callback
あなたはresult
例えば
の値として、あなたのレンダリングされたHTMLを呼び出しますnodejsスタイル(err, result)
コールバック
// entry.js, compiled to bundle.js by webpack
module.exports = function render(locals, callback) {
callback(null,
'<html>' + locals.greet + ' from ' + locals.path + '</html>');
};
それはあなたのコンポーネントをインスタンス化する(したい場合は、ルータに反応おそらく経由)とReactDOMServer.renderToString()
でそれらをレンダリングします。この機能です。
その後、StaticSiteGeneratorPlugin
のあなたのインスタンス化だけでなく、前述したメタデータ値を含むオブジェクトpaths
中とlocals
であなたの具体的なルートでbundle
としてコンパイルさbundle.js
を指定します。あなたがwebpack.config.js
にlocals
に指定
var paths, locals; // compute paths from metadata files or frontmatter
module.exports = {
entry: {
bundle: './entry.js' // build bundle.js from entry.js source
},
...,
plugins: [
new StaticSiteGeneratorPlugin('bundle', paths, locals)
]
}
キーはrender(locals, callback)
へのすべての呼び出しのlocals
パラメータ中に存在するであろう。プラグインによって提供されるpath
,assets
およびwebpackStats
キーとマージされます。
あなたは、一般的な方法でReactDOM.render()
を呼び出して、あなたのWebPACKの設定に追加page.js
エントリをコンパイルし、その後に自分のrender(locals, callback)
関数内で放出されるscript
タグにそのバンドルをロードすることができ、レンダリングした後、あなたのページにJavaScriptコードをロードする場合bundle.js
(上記) page.js
は、entry.js
でレンダリングしたときと同じように、DOMの同じ場所にコンポーネントをマウントするようにしてください(おそらく親要素にid
属性を設定します)。また、両方の環境で任意の場所(ルートパス)の従属変数が揃うようにする必要があります。
このプラグインも使用するGatsbyのソースコードを確認してください。代わりの方法として、Phenomicのソースコードを見ることもできます。
サーバー側のレンダリングを試しましたか? – Bezzi
@Bezziあなたはもっと明白なことができますか? webpack.configを共有するのと同じように:Dビルド時に静的HTMLを生成する必要があります –
ページ全体が静的な場合にのみこれを行うことができます。 APIとの通信はありませんか? – Fyre