※CSR前提のお話です。
nextjsで詳細ページでデータを取得する場合にidを取得するみたいなことはよくやる。
|
|
しかしこの場合レンダリング時にidが取得できないことが…
router.isReady
状態じゃないとqueryパラメータが取得できないですよね。
router.isReadyじゃない場合の問題点
|
|
例えば上記のコードは、router.isReady
が trueじゃないと id が undefinedになってしまう。
なので、https://localhost/api/projects/undefined
みたいなリクエストがサーバ側に送られてしまいます。
これは流石に微妙なのでなんとかしたい。
useSWRの場合
|
|
みたいな形で対応できます。 そうです。わたしがReactをシンプルにするSWRです。
しかしuseApidaSWRの場合は、第一引数はnullが許容されていないので、この実装は無理です…
useApidaWRでの解決方法
型情報を見ていたら、optionsのパラメータに enabled
という値があります。
aspida/index.ts at 858ecc257bba5cb68a9ae8d2bbf6ad5f043076a4 · aspida/aspida · GitHub
SWRのキーを取得する処理でなんとなくenabledじゃないとkeyをnullにするっぽい処理がはいってあtので、useSWRと同じようなことができそうだなと。
aspida/index.ts at 858ecc257bba5cb68a9ae8d2bbf6ad5f043076a4 · aspida/aspida · GitHub
ということで、以下のような実装をしてみたところうまく動きました。
|
|
id as number
してて負けている気もするけど、今の所この実装しか思い浮かびません。
もっと良い方法があったら誰か教えて下さい…。