useQueryを使っているページに別ページから遷移するとエラー
Q&A
Closed
ReactQueryを使っている場合のみ、エラーが発生します。
解消方法がわからず、もし思い当たる内容などあればご教授いただけると幸いです。
利用バージョン、環境
・react 18.1.0
・typescript 4.7
・react query 3.39
・create react appでアプリ作成。SPAで、apiより非同期でaxiosを使いデータを取得している
概要
上記のバージョンで、react queryを利用してデータ取得関数を使い、
ページA(トップページ)でそのデータを表示させています。
ページAで画面読み込み時は通常は正常に表示され、ページB、Cなどに移動した後Aに戻っても正常に表示されています。
エラー発生条件
別のページBでサイトを「リロード」してサイトを再読み込した後に、
ページAに戻ると、本エラーが発生し、さらに画面が真っ白になります。
なおページBはテストで作った、ただ1行のdivタグを返すのみのページです。
エラー内容(コンソールに表記)
Uncaught Error: A component suspended while responding to synchronous input.
This will cause the UI to be replaced with a loading indicator.
To fix, updates that suspend should be wrapped with startTransition.
実際のコード
クエリの関数
export const GetTopics = async() => {
try{
const res = await axios.get(URL)
return res.data;
}catch(e){
console.log('エラー')
console.log(e.response)
}
}
エラー発生ページ
export const Home:FC = () => {
const { isLoading:topic_loading, error:topic_error, data:topics} = useQuery(
'topics',
() => GetTopics(),
);
console.log('取得情報');
console.log(topics);//このページで再読み込み時、この時点では正常にデータがある
return (
<div>
{(() => {
if (error) {
return( <div>loading・・・</div> );
} else {
return (
<ul className="topics_wrap">
{
filtedTopics.map((topic)=>(
<li key={topic.id}>
<Link to={"/topic/" + topic.id} state={topic}>
<Topic
id={topic.id}
title={topic.title}
/>
</Link>
</li>
))
}
</ul>
);
}
})()
}
</div>
)
}
試したこと
エラーメッセージから行き着いた参考ページ
https://github.com/facebook/react/issues/25629
・suspenceでjsxタグを囲む→改善せず
・エラーで促されているように、startTransitionでjsxのタグを囲むなどを試してみましたが、同状況で同事象が発生します。
・最初はクエリの種類をreact queryを使う場合と使わない場合がページにより混合していたので、
エラー発生しているページAと、テストでdivタグのみを返すページBの
2ページのみにしてみましたが、事象は同様に発生しております。
・useQueryを使わず、useEffectのなかでGetTopicを使い、usestateでtopicsをセットすると、該当のエラーとなりません。。が、usequeryはシンプルに書けるコードなので、使えるならば使いたいと考えています。