新しいプロジェクトで反応クエリを使用し、小さな問題があります。要件は、データが読み込まれる前に空のページに読み込み中のスピナーを表示し、ユーザーが別のクエリで新しい結果を取得して以前の結果の上にスピナーを表示することです。
最初のケースは非常に簡単で、十分に文書化されています。
const { isLoading, error, data } = useQuery(["list", query], () =>
fetch(`https://api/list/${query}`)
);
if (isLoading) return <p>Loading...</p>;
return <div>{data.map((item) => <ListItem key={item.id} item={item}/></div>
しかし、2番目のケースを理解できません-クエリがreact-queryを変更した後、新しい結果のフェッチを行い、useQueryからのデータが空であるため、デフォルトの空の配列を取得し、その場合はその条件に該当します-if (isLoading && !data.length )
const { isLoading, error, data=[] } = useQuery(["list", query], () =>
fetch(`https://api/list/${query}`)
);
if (isLoading && !data.length ) return <p>Loading...</p>;
return <div>
{data.map((item) => <ListItem key={item.id} item={item}/>
{isLoading && <Spinner/>}
</div>