レンダリングコンポーネントは、非同期呼び出しが成功した後にのみ必要です。その前に、ユーザーエクスペリエンスを向上させるためのローディングコンポーネントを示したいと思います。反応コンポーネントの非同期レンダリング、グローバルLoadingコンポーネントの設定方法は?
1つのコンポーネントで、私はそれを扱う方法を知っていて、Reactjs async rendering of componentsを参照しています。しかし私のプロジェクトでは、非同期呼び出しで情報を表示するページ(コンポーネント)が数多くあります。
すべてのコンポーネントに内部状態を書き込むのではなく、グローバルな読み込みコンポーネントをいくつかの場所に設定する方法はありますか?あなたはそのようなこと行うことができますhttps://facebook.github.io/react/docs/higher-order-components.html
:
function withAsynchronous(WrappedComponent, url) {
return class extends React.Component {
constructor(props) {
super(props);
this.state = {
isLoading: true
};
}
componentDidMount() {
// You async call
GetAsync(url, data => {
this.setState({ isLoading: false, data: data });
});
}
render() {
if (this.state.isLoading) {
return (<YourLoadingComponent />);
}
return <WrappedComponent data={this.state.data} {...this.props} />;
}
};
}
をし、そのようにそれをレンダリング:
こんにちは@Paul DSを隠し、私は、HOCsを読みますたくさんのことをたくさん学んだ。私はこれを次のようにしました: 'const MyFund = Loading(WrappedComponent、 'wt/fund/0001.json'); export default MyFund; 'それは動作します(LoadingはHOCです)。 最後の部分について少し混乱しています。「そして、それをレンダリングします。... ...」このパートのコードの使い方は? 'componentDidMount'メソッドと' render'の中で? – jason
私は 'componentDidMount'関数を' YourAsyncPage'オブジェクトの作成方法を示すためだけに使っていましたが、あなたが好きなところで行うことができました。 'render'メソッドでオブジェクトを作成しないよう注意するだけで、各レンダリング時にオブジェクトを再作成しないようにする必要があります –