私はReactJSで構築されたレスポンシブなWebアプリケーションを用意しています。サーバー側のレンダリング+レスポンシブデザイン+インラインスタイル - >使用するブレークポイント?
ビューポートのサイズに応じて、アプリケーションのレイアウト/動作が変更されます。しかし、これらの変更はすべて、単純なCSSメディアクエリで行うことができるだけでなく、JSの振る舞いやHTML構造も幅に応じて変更する必要があります。
例えば、私が持っている可能性があり:
幅800ピクセルの下で:
<div class="app">
<div class="menu-mobile">...</div>
<div class="content">...</div>
<div class="mobile-left-menu">...</div>
<div class="footer-mobile">...</div>
</div>
幅 800ピクセル上:今
<div class="app">
<div class="menu">...</div>
<div class="main">
<div class="left-menu">...</div>
<div class="content">...</div>
<div class="right-menu">...</div>
</div>
<div class="footer">...</div>
</div>
、私は、サーバー側のレンダリングを使用したいですそのアプリケーションのために。しかし、サーバー上には幅がないので、どのHTML構造をクライアントに返すのかわかりません。
私は、静的なデフォルトのサーバー側のブレークポイントを使用するソリューションを探していないことに注意してください。クライアント側では、そのアプリケーションを修正します。私は、そのデバイスに応じて適切なHTML構造をクライアントに返すソリューションを探しています。彼がブラウザでjavascriptを無効にするとうまくいくはずです。
一つは、私は両方のために必要なHTMLをレンダリングすることができると主張し、プレーンなCSSのmediaqueriesとdisplay: none
で必要な部分を表示/非表示が、それはアプリを複雑にし、それが未使用のHTML要素の多くをレンダリングするだろうことができ一般的に、ユーザーがブレークポイントの上または下に移動する可能性は低いから(つまり、モバイルデバイスを使用している場合、デスクトップのhtml要素は使用されません)
また、インラインスタイルを使用する場合は、これらのインラインスタイルをサーバー上の正しい幅にレンダリングする必要があるため、複雑です。
私はseenをブラウザのUAに盗聴させて、ビューポートのサイズを推測することを考えている人がいます。しかし、いくつかの安全でない画面サイズの検出でも、私はサーバー側のデバイスの画面の向きを知ることができません。
この問題を解決するために何かできますか?
これはあなたには十分ではないと確信していますが、本当に両方のディスプレイをレンダリングする必要があります。あなたが言及したように、実際にはクライアント上の画面サイズを確かめることはできないので、フル/モバイル版をレンダリングすべきかどうかを知ることはできません。 ここでは私のアプリで何をしたのか分かりませんが、私はコンテキストを介してビューサイズを共有するリサイズリスナーを設定するコンポーネントでアプリケーションをラップしました。すべての応答コンポーネントは、ビューサイズを読み取り、それに応じてレンダリングします。 –
クライアントアプリケーションからの最初のリクエストでビューポートのサイズ、方向などを指定する上での制限はありますか? –
@LuisCrespoあなたの質問を理解していない。私はSSR atmをやっているわけではなく、解決すべき具体的な問題はありませんが、近い将来SSRを探求し、このような問題をどのように処理するかを知りたいと思います。今のところ、Gershon Papiの提案は不幸にも唯一の方法だと思われます。 –