私はAPIを介してデータをフェッチするさまざまな反応コンポーネントがあり、それぞれに対応するloadDataアクションとisLoadingレデューサーがあります。私は、データがロードされ、コンポーネントが表示されるまで、コンポーネントの代わりにスピンナーをロードすることを示すHOCを記述しようとしています。ロード中にスピナーを表示するためにHOCにデータ取得コンポーネントをラップします。
isLoading true - > isLoadingはfalseになります - >子コンポーネントはレンダリングされます - > child's componentDidMount()executed - >これは再びisLoadingをfalseに設定するloadDataアクションを呼び出します。それを防ぐにはloadDataを一度だけ呼び出す方法はありますか?それとももっと洗練されたソリューションがありますか?
class DataList extends Component {
componentDidMount() {
this.props.loadData(); //action that pulls data via api
}
render() {
return <p>{this.props.data}</p>;
}
}
const withSpinner = (comp) => (props) => {
if (props.isLoading) {
return <p>Loading...</p>
} else {
return <comp {...props} />
}
}
export default connect()(withSpinner(DataList));
// action that fetches data and updates state
const loadData =() => {
setIsLoading(true);
data = await fetchData();
setIsLoading(false);
}