私はアプリケーションにサーバー側のレンダリングを使用していますが、ページをレンダリングする前にAPIを使用してデータをロードします。 私は、サーバー側とクライアント側の両方をレンダリングする前にコンポーネントWillMountが呼び出されたが、ajaxコードは実行していないことがわかりました。 $が定義されていないと言って、 ページをレンダリングする前にデータをロードする方法を教えてください。
答えて
これは、質問の詳細が不足しているため、一般的な回答になります。しかし、私はそれが主題についていくつかの光を放つことを願っています。
私の個人的な経験に基づいて、サーバーのレンダリングに反応するならば、全体の状態を処理する「コントローラー」コンポーネントを用意するほうがよいでしょう。その下のものはすべてAjaxに依存しません。データをまったく読み込みません。たとえば、Reduxを使用している場合、この「コントローラ」コンポーネントはProvider
になります。これは、1つのコンポーネントがすべてのコンポーネントよりもサーバーとクライアントを処理する方がはるかに簡単なためです。
外部の「コントローラ」コンポーネントは、サーバー上にあるかどうかを知って、それに従ってデータを別々に読み込む必要があります。これを行う1つの方法は、「ウィンドウ」が定義されているかどうかを確認することです。つまり、サーバー上にいる場合は、Ajax al allを使用して初期状態をロードしないでください。ただし、クライアント上にいる場合は、Ajaxを使用してください。
最後に問題が1つあります。サーバーレンダリングを実行するときに、クライアントがサーバーにラウンドトリップして既に持っているのと同じデータを取得しないようにします。これを防ぐために、スクリプトブロックをクライアント上で実行するようにします。このスクリプトブロックには、初期状態が含まれています。この変数が設定されている場合は、Ajaxを実行しないでください。このように:
<script>
window._serverState = {...}
</script>
もう一つ..私は個人的に私が反応とは思わないとjQueryを一緒に使用する必要がありますAjaxのための$を使用しないでください。チェックアウト:Axios
jQueryを使用することはできますが、依存を減らしたい場合はAxiosのようなサードパーティのライブラリを使用できます。それは他の何よりも選択肢です。 – DOMZE
一般に、componentWillMount
にajaxコールを発信することはお勧めできません。 componentWillMount
レンダリングの直後にレンダリングが行われるので、レンダリングはajax呼び出しが完了して新しいデータを取得するまで待たなければなりません。
それは空の状態データで初めて行わレンダリングを取得する方が良いでしょうが
data:[]
を言うとcomponentDidMount
にAJAX呼び出しを行うことができます、これはあなたがDOM操作を行うとAjaxリクエストを送ることができる場所です。
componentDidMount() {
sendAjaxRequest()
.then(
(newDataFromServer) => {
this.setState({data : newDataFromServer });
});
}
新しいデータがサーバーからフェッチされた後は、新しいデータ
this.setState({data:newDataFromServer});
で状態を設定します。これは、サーバーと新しい状態の変化からフェッチされた最新のデータが反映されることになると発生する再レンダリングが発生します。
- 1. 未定義変数Ajax経由で送信する場合
- 2. Redux Thunk Action = componentWillMountで未定義
- 3. AJAX JSONレスポンスは '未定義'ですか?
- 4. クラス関数内でajaxリクエストを送信する方法
- 5. AJAXで未定義のパラメータ
- 6. AJAXで未定義の値
- 7. Rxjs Observableが未定義を送信する - それを避ける方法
- 8. 未定義のメソッドのエラー送信()メソッド
- 9. サーバへのポストメソッドの送信が未定義です - エラー
- 10. パイプ内の未定義品目をチェックする方法は?
- 11. typescriptで未定義の変数を設定する方法は?
- 12. すべての未送信レポートをACRAで送信する方法
- 13. AjaxからMVCコントローラに送信される未定義の変数
- 14. POSTデータを送信する際に未定義のインデックス
- 15. Ajaxファイルのアップロードで偽造トークンを送信する方法は?
- 16. ajaxとPOSTで$ varを送信する方法は?
- 17. Ajaxコールでユーザー名とパスワードを送信する方法は?
- 18. ajaxで未確認のチェックボックス値を送信する
- 19. 未定義方法
- 20. 未定義方法
- 21. モーダルダイアログ戻り値は未定義です - 結果を親ウィンドウに送信
- 22. Reactjs ajax未定(約束しています)ReferenceError:$は未定義です
- 23. ajax - ajaxでフォームを送信する2
- 24. プロンプトフィールドでAjax JSON応答が未定義
- 25. perlのOOコードで未定義キーをチェックする方法は?
- 26. AngularJSで未定義をチェックする方法は?
- 27. ユーザー定義オブジェクトを他のアクティビティに送信する方法
- 28. Ajax JQuery内でフォームを送信
- 29. Ajax、XMLHttpRequestステータス未定義エラー
- 30. 未定義のAJAXエラー
私たちにいくつかのコードを提供してください –
jQueryのAJAXは使用しないでください。ブラウザでのみ動作します。 axios、superagent、同形フェッチなどのような "同形"または "ユニバーサル"クライアントを使用してください。 –