1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

【初学者】mapメソッドの繰り返し処理の中で、SWRに渡したparamsが異なるにも関わらず、同じデータが返ってくる事象の対処

Last updated at Posted at 2022-11-05

事象

以下のような外部webサイトの情報をまとめたカードを複数作成するために、SWRを使用して、APIに渡したURLのOGP情報を取得するような処理を書いていました。しかし、mapメソッドで繰り返し作成したコンポーネントごとに渡したurlは異なるはずなのに、作成されるカード(SWRで取得したデータ)が全て同じになりました。
image.png

原因

おそらく、SWRに渡す値を変えず、切り出したfecherに直接取得したいURLのパラーメータを渡してしまっていた結果、fetcherの中の値は異なるにも関わらず、SWR側では同じリクエストと判断してしまったため、キャッシュ(?)を使用して、同じデータが返ってきてしまったと思われます。

対処

fetcherに与えていたurlのパラメータを、SWRの引数として渡した結果、うまくいきました。

実際のコード

export const useURLData = (url: string) => {
-  const fetcher = async (apiURL: string) => {
+  const fetcher = async (apiURL: string, url: string) => {
-    const res = await axios.get(apiURL, { params: { url: url } });
+    const res = await axios.get(apiURL, { params: { url } });
    return res.data;
  };
- const { data, error } = useSWR('http://localhost:9000/api/ogp', fetcher);
+ const { data, error } = useSWR(['http://localhost:9000/api/ogp', url], fetcher);
  return {
    urlData: data,
    isLoading: !error && !data,
    isError: error,
  };
};

【参考にした記事】

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?