非同期ルートをプリフェッチまたはプリロードする方法はありますか?私はRR2/3でこれをどうやって行うのかを模索しています。基本的な考え方はすべてのルートでコードを分割することですが、そのページを訪れる前に、サービスワーカーの接続ページのバンドルをキャッシュできるようにしたいと考えています。だから、私がしたいのは、レンダリングされるたびに、それがリンクされているページのリソースをキャッシュしようとするカスタム<Link>
です。これにより、ページ遷移がかなり速くなります。私が知らないことは、ルートにナビゲートしてエミュレートしてリソースをフェッチする方法があるかどうかです。これを行うためのAPIやこれをやるためのトリッキーな方法がありますか?非同期ルートのプリフェッチリソース
1
A
答えて
0
リンクがマウントされている場合、タイムアウトでrequire.ensure...
セクションを実行するだけで済みます。それはコードを分割して非同期にロードする必要があります。タイムアウトは、別のファイルにロードされることを保証します。
私はRR3で見つけたように、コード分割にRR4を使用することをお勧めします。子ルートが変更された場合は、非同期の必須ルートが再組み込みされ、再レンダリングされます。私の場合は、私のルートのcomponentWillMountを子ルートの変更のために起動しました。例えば/agent/step-1
から/agent/step-2
に移動すると、/agent
のコンポーネントがアンマウントされ、再度マウントされます。
1
これは私が思いついたものです。 React Router Linkコンポーネントを包み込むコンポーネントで、componentDidMount
(サーバーではなくクライアント上でのみ実行されます)で、稼働中であることを確認します(開発中にこれを実行する必要はありません)。そして、これがでない場合はサービスワーカー(このチェックは私のユースケースに固有のものです)。その後、手動で場所と照合し、非同期のgetComponent
関数を呼び出します。
import React from 'react'
import Link from 'react-router/lib/Link'
class GatsbyLink extends React.Component {
componentDidMount() {
// Only enable prefetching of Link resources in production and for browsers that
// don't support service workers *cough* Safari/IE *cough*.
if (process.env.NODE_ENV === 'production' && !('serviceWorker' in navigator)) {
const routes = require('my-routes')
const { createMemoryHistory } = require('history')
const matchRoutes = require('react-router/lib/matchRoutes')
const getComponents = require('react-router/lib/getComponents')
const createLocation = createMemoryHistory().createLocation
if (typeof routes !== 'undefined') {
matchRoutes([routes], createLocation(this.props.to), (error, nextState) => {
getComponents(nextState,() => console.log('loaded bundle(s) for ' + this.props.to))
})
}
}
}
render() {
return <Link {...this.props} />
}
}
module.exports = GatsbyLink
関連する問題
- 1. 変更ルートは、ルータは、非同期アクション
- 2. (非同期)$ httpの結果を(同期的に)ルート上のパーミッションをチェックする
- 3. 非同期ループ内の非同期メソッド
- 4. 非同期メソッドの非同期メソッド
- 5. 非同期イベントの同期
- 6. Node.jsの非同期/同期
- 7. 非同期メソッド非同期に新
- 8. 非同期操作と非同期ネットワークタスク?
- 9. NodeJs - 非同期/非同期/待機中
- 10. 春非同期 - 非同期豆に
- 11. 非同期、非同期待機
- 12. 非同期/同期ループNode.js
- 13. 非同期ソケットと同期
- 14. リクエストレスポンモデル/同期/非同期/イベントドリブン
- 15. Laravelジョブクエリ非同期/同期?
- 16. 反応ルータv4で非同期ルートへのプライベートルートを作成
- 17. 「非同期キーワード非同期」関数を「非同期キーワード非同期」関数に変換できますか?
- 18. RxSwiftとの非同期ネットワークコールの同期
- 19. RxJSとの非同期アクションの同期
- 20. 同期非同期入力の処理
- 21. 非同期関数の同期例外
- 22. 同期対非同期データベースへのアクセス
- 23. リアルタイムアプリケーションの非同期対同期ソケットサーバー
- 24. 同期コードの非同期実行
- 25. 非同期マップの同期セクション
- 26. 同期と非同期のアクティビティ
- 27. ベクトル(同期)のArrayList(非同期)
- 28. 非同期ブロック
- 29. 非同期データローディング
- 30. 非同期タスク
私はまだそれを再作成する必要はありません、私のルート定義にrequire.ensureのものを設定している - ちょうど一致したルートの各レベルは、そのリソースがフェッチなることを確認してください。 –