Razzle: 適切にレンダリングされないスタイルのハイドレーション

作成日 2018年10月03日  ·  5コメント  ·  ソース: jaredpalmer/razzle

愛するラズル、そのような素晴らしいツール。

マテリアルUIをセットアップし、1つを除いてすべてが_素晴らしく_機能しているという問題があります。サブページにアクセスしてページを更新すると、最小限のスタイルのみのページが表示されます。 これは実際には魅力的なバグです。最後のyarn startから開いたページによっては、更新された場合にのみそのページが適切にレンダリングされるためですが、ナビゲートして更新すると(ルートパス上でも)機能しません。

  1. yarn startサーバーを起動します
  2. たとえば、 http://localhost:3000/blog-postsします
  3. ページを更新します(すべてががらくたのように見えます)
  4. サーバーを強制終了します(ブラウザウィンドウを開いたままにします)
  5. yarn startサーバーを起動します
  6. ページを更新すると、美しく見えます(すべてを適切にレンダリングします)
  7. 別のページに移動します
  8. リフレッシュして、がらくたのように見えます...そして繰り返します。

yarn build && yarn start:prodを試してみたところ、システムは実行されましたが、最小限のスタイルでしか実行できませんでした。 ただし、リンクを見つけてクリックすると、アプリケーション全体が再び美しく見えます。

私はそれがハイドレートまたは多分それと@material-ui/core/styles/withStylesいくつかの組み合わせの問題であると仮定しています。 この問題に遭遇している人はいますか?

その後のページの読み込みでは、クラスが異なります(レンダリングされたhtml )。これは、おそらく、次の説明に関連していることを認識している同形スタイル/クラスの初期読み込みに関連していることを意味します。

しかし、私の状況が上に示しているように、それは時々それらの議論がそれを見せているよりも近くにあると私に思わせるように働いているようです。 考え?

最も参考になるコメント

長い退屈な調査とデバッグの後はもう少し満足できると思うかもしれませんが、修正は基本的にafter.js、react-jssを使用して、独自のDocument 、次に下部の行を生成しますこのスレッドの(MUI関連のみであるMuiThemeProviderについて):

  static async getInitialProps({ assets, data, renderPage }) {
    const generateClassName = createGenerateClassName()
    const jss = create(jssPreset())

    const page = await renderPage(App => props => (
      <JssProvider jss={jss} generateClassName={generateClassName}>
        <MuiThemeProvider sheetsManager={new Map()}>
          <App {...props} />
        </MuiThemeProvider>
      </JssProvider>
    ))

    return { assets, data, ...page }
  }

皆さんが痛みを避けてくださいますように。 :P

全てのコメント5件

ハハハハラズルのマテリアルUIでも同じ問題が発生しました😢

@CharlyJazzそれは非常に(en | dis)勇気づけられます。 ハハ、 withStyles実装から同型クラスに移行してみましたか?

長い退屈な調査とデバッグの後はもう少し満足できると思うかもしれませんが、修正は基本的にafter.js、react-jssを使用して、独自のDocument 、次に下部の行を生成しますこのスレッドの(MUI関連のみであるMuiThemeProviderについて):

  static async getInitialProps({ assets, data, renderPage }) {
    const generateClassName = createGenerateClassName()
    const jss = create(jssPreset())

    const page = await renderPage(App => props => (
      <JssProvider jss={jss} generateClassName={generateClassName}>
        <MuiThemeProvider sheetsManager={new Map()}>
          <App {...props} />
        </MuiThemeProvider>
      </JssProvider>
    ))

    return { assets, data, ...page }
  }

皆さんが痛みを避けてくださいますように。 :P

@jaredpalmer @jylinman razzleドキュメント用にこの例を作成することはできませんか?

この問題が発生している他の人には、公式のMaterial-UI SSRドキュメントに従うことを強くお勧めします: https

このページは役に立ちましたか?
0 / 5 - 0 評価

関連する問題

mhuggins picture mhuggins  ·  3コメント

kkarkos picture kkarkos  ·  3コメント

jcblw picture jcblw  ·  4コメント

pseudo-su picture pseudo-su  ·  3コメント

dizzyn picture dizzyn  ·  3コメント