現在、メニューを含むWebアプリケーションを構築中です。メニューはいくつかの変数に応じて変わる可能性があるので、私はapiを呼び出して、表示されるべき正しいメニュー項目を要求します。React/Reduxページのレンダリング前にAPIレスポンスからコンテンツをプリロードする
server.get('/api/getMenu', (req, res) => {
getMenu((err, content) => {
if(!err) {
res.send(content);
} else {
res.status(500).send();
}
})
});
この要求は完全に正常に動作している、と私は、これが再び正常に動作し、メニュー項目をロードしている、しかし、それは奇妙に見えるcomponentWillMount
にexport function fetchMenuItems() {
return (dispatch) => {
fetch('/api/getMenu')
.then((response) => {
if (!response.ok) {
throw Error(response.statusText);
}
return response;
})
.then((response) => response.json())
.then((results) => dispatch(fetchSuccess(results)))
}
}
export function fetchSuccess(results) {
return {
type: 'FETCH_SUCCESS',
menuItems: results
};
}
を、このAPIを呼び出すアクションを派遣していますページの残りの部分が既に読み込まれた後にメニューアイテムがページ上にレンダリングされているように見えます(リクエストの所要時間が原因であると想定しています)。
ページ全体が実際にレンダリングされる前にメニューアイテムをプリロードする方法はありますか?私は約束を聞いたことがありますが、それはほとんど分かりませんが、これは潜在的に解決策ですか?
これは私が現時点でやっていることですが、非同期アクションなので、かなりの量のページの後にアイテムが読み込まれます。私の質問は、ページロードの前にこの非同期アクションをどのように実行して、メニュー項目が既にロードされているかということでした。 – Phil
その場合、rxjsのcombinelatest apiを試すことをお勧めします。https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/combinelatest.md – nicemayi