Facebookなどのウェブサイトでページを変更すると、ブラウザの読み込みインジケータがトリガされることがありますが、ときどきフルページのリロードが行われないことがあります。どのようにReactを使用して同様の動作を達成するには?Reactを使用すると、ルートを変更するときにブラウザタブでブラウザの読み込みインジケータをトリガする方法はありますか?
0
A
答えて
0
反応ルータを使用している場合は、クライアント側でルート変更を処理できます。ルートが変更されている間、ロードインジケータを表示するためにHOCを作成できます。
import React from 'react';
import Loader from './Loader';
function withRouteLoader(WrappedComponent) {
class AppWithRouteLoader extends React.Component {
constructor(props) {
super(props);
this.state = {
isLoading: false,
loadedRoutes: props.location && [props.location.pathname],
};
this.updateIsLoading = this.updateIsLoading.bind(this);
}
componentWillMount() {
this.unsubscribeHistory = this.props.router && this.props.router.listenBefore((location) => {
if (this.state.loadedRoutes.indexOf(location.pathname) === -1) {
this.updateIsLoading(true);
}
});
}
componentWillUpdate(newProps, newState) {
const { loadedRoutes } = this.state;
const { pathname } = newProps.location;
if (loadedRoutes.indexOf(pathname) === -1 && newState.isLoading === true) {
this.updateIsLoading(false);
this.setState({
loadedRoutes: loadedRoutes.concat([pathname]),
});
}
}
componentWillUnmount() {
this.unsubscribeHistory = undefined;
}
updateIsLoading(isLoading) {
this.setState({ isLoading });
}
render() {
return (
<div>
<Loader show={this.state.isLoading} />
<WrappedComponent {...this.props} />
</div>
);
}
}
AppWithRouteLoader.propTypes = {
location: React.PropTypes.object,
router: React.PropTypes.object,
};
return AppWithRouteLoader;
}
export default withRouteLoader;
このBoilterplate https://github.com/react-boilerplate/react-boilerplateを参照してください。それはすべてが実装されている
関連する問題
- 1. ページを更新または再読み込みするときにJavaScript関数をトリガする方法は?
- 2. ブラウザがページを読み込んでいるときにJavaScriptを認識する方法はありますか?
- 3. Default.pngイメージの読み込みインジケータを読み込む方法
- 4. CSSファイルを読み込むときにブラウザのバイパスコンテンツタイプを使用することはできますか?
- 5. 複数のアプリの読み込みを防止する方法はありますが、異なるインスタンスを読み込むことはできますか?
- 6. 変数の読み込みと更新にキューイングを追加する方法は?
- 7. 元のHTMLを読み込み中に変更する方法
- 8. ファイルをダウンロードするときにブラウザに読み込みを指示します
- 9. 角度を変更するブラウザを再読み込みする必要があります
- 10. iPhone/Safari:読み込み時にページのサイズを変更する方法はありますか?
- 11. iframeの読み込みを停止する方法はありますか?
- 12. StringIOの読み込みをブロックする方法はありますか
- 13. addEventListenerに複数のイベント(サイズ変更と読み込み)をバインドする方法
- 14. CamelではSpringを使用してプロパティを再読み込みする方法はありますか?
- 15. UmbracoのAdminカスタムグリッドエディタでデータを読み込むときに待機メッセージを表示する方法や画像を読み込む方法はありますか?
- 16. httpを使用する方法応答方法を読み込みますか?
- 17. C#で読み込み専用のパブリック変数を使用することはできますか?
- 18. テーブルの読み込み時にトリガをアクティブにする方法は?
- 19. ブラウザのページ読み込みを待機する方法
- 20. 多くのテキストを読み込むときに、JavaFX 2でTextAreaをスピードアップする方法はありますか?
- 21. 変更されたクラスを再読み込みするときにjettyがリクエストをブロックする方法?
- 22. 変数を読み込み専用にする方法はありますが、定数にすることはできません。
- 23. イメージをグライドで読み込むときにACTION_VIEWインテントを使用する方法
- 24. yii2でデータセットを作成する方法はありますか?ページの読み込みではなく、keyup/enterでデータを読み込みますか?
- 25. ready_onlyモードを非アクティブにする方法、または書き込み可能/書き込み可能に変更する方法はありますか?
- 26. Selenium Python:head/titleが読み込まれたときにページの読み込みを停止する方法は?
- 27. DBをフェッチする際に読み込みページを使用するReact-Router
- 28. コンテンツページを読み込むときに、マスターページ内のラベルのテキストを変更することはできますか?
- 29. ワードプレスでビジュアルコンポーザーの読み込みイメージを変更するには
- 30. UIActivityIndicatorViewを使用して画像読み込みプロセスをフェードインする方法はありますか?
それは、リアクションの解決策についての答えではありませんが、それはFacebook上でどのように動作するかについて説明しています - https://stackoverflow.com/questions/9882820/browser-busy-indicator-when-loading- data – chuve
@chuveのように、 'iframe'でトリックを使うべきです。さらに詳しい情報はここにあります:https://stackoverflow.com/questions/1918218/how-to-have-ajax-trigger-the-browsers-loading-indicator – yivo
同じトリックが何年も前からvk.comで使われています(トップロシアのソーシャルネットワーク) – yivo