Dominic Tobiasからのお返事ありがとうございます。
私はカップルのソリューションを開発しようとしましたが、私はそれが私に適していることを発見しました。
class PageContainer extends Component {
static fetchData(params) {
return fetch('...URL...')
}
render() {
const {data} = this.props;
//render logic here
}
}
とサーバ側の
、
PageContainer.fetchData
を呼び出すとまで待つ:
まず、私はこのようなPromise
を返す静的メソッド呼び出しfetchData
をいずれかcomponentWillMount
またはコンポーネント内componentDidMount
でデータをフェッチするが、作成しないことに決めました約束は、果たさPageContainer
にprops
としてデータを渡し、この
<html>
<head></head>
<body>
<div id="roor">{..react rendered HTML..}</div>
<script>window.__DATA__ = {..data..}</script>
</body>
</html>
のような水和したデータをHTMLをレンダリングしています私が言ったように、このアプリのために、私は今還元は不要だと思う。
次に、クライアント側のルーティングには、react-router
が非同期データをロードできないという問題があります。それを修正するために、私はAsyncPropsを探しに行き、AsyncCompと呼ばれる自分の小さなバージョンを書きました。
const Root = <Router history={browserHistory} routes={routes} render={(props) => <AsyncComp {...props} data={window.__DATA__}/>}/>
ReactDOM.render(Root, document.getElementById("root"));
すべてですそれ:あなたはこのようreact-router
とクライアント側上で反応ブートストラップすることができます。
PS。 AsyncComp
を作成した後、次のようにサーバー側で使用することもできます。