0

シンプルなアプリのサーバー側レンダリング中にデータを渡そうとしています。

サーバーとクライアントの両方にこのデータプロバイダーがあり、グローバル変数を使用して初期状態をクライアントに挿入します。

import React, { Component } from 'react';

export default class SsrDataProvider extends Component {
  constructor(props) {
    super(props);
    this.state = { data: window.__INITIAL_STATE__ };
  }

  getChildContext() {
    return { data: this.state.data };
  }

  render() {
    return this.props.children;
  }
}

SsrDataProvider.propTypes = {
  children: React.PropTypes.object,
};

SsrDataProvider.childContextTypes = {
  data: React.PropTypes.object,
};

サーバーでは、ウィンドウ。INITIAL_STATEは、prop を介して渡された実際のデータに置き換えられます。

renderToString(<SsrDataProvider {...renderProps} data={data} />)

データプロバイダーは、子の代わりにルーターコンテキストをレンダリングします...

render() {
  return <RouterContext {...this.props} />;
}

問題は、サーバーのレンダリング中にコンテキストが定義されていないことです。それはまったく渡されなかったようなものです。次に、javascript バンドルがクライアントに到着すると、ウィンドウが使用されます。INITIAL_STATE変数を変更し、サーバーが中断したところから再開します。それは機能しますが、サーバー側のレンダリングは行わない方がよいでしょう。足りないものはありますか?それとも renderToString() がコンテキストをサポートしていないのでしょうか?

4

1 に答える 1