2017-07-12 17 views
0

現在、メニューを含む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を呼び出すアクションを派遣していますページの残りの部分が既に読み込まれた後にメニューアイテムがページ上にレンダリングされているように見えます(リクエストの所要時間が原因であると想定しています)。

ページ全体が実際にレンダリングされる前にメニューアイテムをプリロードする方法はありますか?私は約束を聞いたことがありますが、それはほとんど分かりませんが、これは潜在的に解決策ですか?

答えて

0

私はあなたがcomponentWillMount反応ライフサイクルメソッドを探していると仮定しています。

componentWillMountは、コンポーネントが初めてレンダリングされる直前に1回だけ呼び出されます。これは、プリロードデータロジックを配置するのに最適な場所です。

これが役に立ちます。

+0

これは私が現時点でやっていることですが、非同期アクションなので、かなりの量のページの後にアイテムが読み込まれます。私の質問は、ページロードの前にこの非同期アクションをどのように実行して、メニュー項目が既にロードされているかということでした。 – Phil

+0

その場合、rxjsのcombinelatest apiを試すことをお勧めします。https://github.com/Reactive-Extensions/RxJS/blob/master/doc/api/core/operators/combinelatest.md – nicemayi

関連する問題