Slide 21
Slide 21 text
// before: パスやパラメータを手で指定しており、typo や値の変換漏れに気付けない
// before: クエリパラメータの指定順を間違えると、SSR 時の fallback を有効に使えない
// before: 戻り値の型も、パスやパラメータからは引けず手で指定する必要がある
export function useComments(tag: string, limit: number) {
const { locale } = useLocale();
const encodedTagName = encodeTagName(tag);
const { data, error } = useSWR(
`/get_comments/${encodedTagName}?lang=${locale}&limit=${limit}`,
);
return useDataOrError(data, error);
}
// after: パスやパラメータの補完が効き、typo や値の変換漏れを型エラーとして検出
// after: SSR 時もこの記法が使え、クエリパラメータの指定順を気にする必要がない
// after: 戻り値の型も、パスやパラメータから推論され手で指定する必要がない
// after: ついでに、2重エンコード防止のため URL エンコード済みの値を幽霊型で区別
export function useComments(tag: TagName, limit: number) {
const { locale } = useLocale();
const { data, error } = useQuery("/get_comments/{tagName}", {
params: { path: { tagName: tag }, query: { lang: locale, limit } },
})
return useDataOrError(data, error);
}
21