回答編集履歴

2

説明文を追加

2021/10/19 10:47

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -8,11 +8,21 @@
8
8
 
9
9
 
10
10
 
11
+ - Promiseとasync/awaitまで消化しきれてないのでは?
12
+
11
13
  - fetcherの作り方分かってないのでは?
12
14
 
13
- - Promiseとasync/awaitまで消化しきれてないのでは?
14
15
 
15
16
 
17
+ Promiseは単体では非常に読み辛いです。
18
+
19
+ async/awaitを駆使しながらPromiseを意識せず使えるようになるとめっちゃ便利!ってなる機能です。
20
+
21
+ もしasync/awaitの勉強がまだなのであれば優先して勉強してみてください。
22
+
23
+
24
+
25
+ 次にfetcherの使い方を見ていきましょう。
16
26
 
17
27
  [SWRを使おうぜという話 - Zenn](https://zenn.dev/mast1ff/articles/40b3ea4e221c36)
18
28
 

1

fetcherの作りを確認して修正した

2021/10/19 10:47

投稿

miyabi-sun
miyabi-sun

スコア21203

test CHANGED
@@ -1,6 +1,44 @@
1
1
  useCheckUserRoleかuseAxiosの二択ですねぃ。
2
2
 
3
3
  ソースコード見直したらuseCheckUserRoleにダメな箇所見つけました。
4
+
5
+
6
+
7
+ 質問文のコード読む限りの懸念がこの2点
8
+
9
+
10
+
11
+ - fetcherの作り方分かってないのでは?
12
+
13
+ - Promiseとasync/awaitまで消化しきれてないのでは?
14
+
15
+
16
+
17
+ [SWRを使おうぜという話 - Zenn](https://zenn.dev/mast1ff/articles/40b3ea4e221c36)
18
+
19
+ この記事ではfetcherは下記のように定義しています。
20
+
21
+
22
+
23
+ > ```js
24
+
25
+ > async function fetcher(url: string): Promise<boolean | null> {
26
+
27
+ > const response = await fetch(url);
28
+
29
+ > return response.json();
30
+
31
+ > }
32
+
33
+ > ```
34
+
35
+
36
+
37
+ つまりfetcherはPromiseを返す関数でなければならない。
38
+
39
+ (async関数を定義すると必ずPromiseのインスタンスを返り値として返す関数になる)
40
+
41
+ Promiseの返り値で`response.json()`を実行している。
4
42
 
5
43
 
6
44
 
@@ -16,21 +54,23 @@
16
54
 
17
55
  const axios = useAxios(); //カスタマイズした設定のaxiosインスタンスを取得
18
56
 
19
- const fetcher = (url: string) => {
57
+ const fetcher = async (url: string) => {
20
58
 
21
- axios.get(url).then((res => {
59
+ // async関数を使う事でawait構文が利用可能になる。
22
60
 
23
- console.log(res.data) //画像のブラウザコンソールに出力されいるものです。ここの力からリクエストは成功していることが確認できま
61
+ // await構文の効果は、Promiseインスタンスの.then(val => {})を実行しvalを取り出す
62
+
63
+ const res = await axios.get(url);
24
64
 
25
65
 
26
66
 
27
- // returnしてからundefinedになるね。
67
+ console.log(res.data); // 受け取ったデータをconsole.logとして表示するコードはそのままにしてお
28
68
 
29
- // こうしてみたら?
30
69
 
31
- return res.data;
32
70
 
71
+ // Promiseインスタンスでres.dataを返すように変更
72
+
33
- }))
73
+ return res.data;
34
74
 
35
75
  }
36
76