Используя TRPC и Next JS, я хочу запросить один пост на основе динамического URL-адреса без использования SSR или SSG. Единственный метод, который я нашел работающим, — это добавить as string
к router.query.id
, но это приводит к ошибке TRPC (ошибка возникает только при первой загрузке), потому что router.query.id
— это пустой объект для начальной загрузки, а не строка. Есть ли способ сделать это без начальной ошибки TRPC?
import { useRouter } from "next/router";
import { api } from "~/utils/api";
const SinglePost = () => {
const router = useRouter();
const { data } = api.post.getById.useQuery({
id: router.query.id as string,
});
return (
<div>
{data}
</div>
);
};
export default SinglePost;
Я думаю, что в вашем случае может быть достаточно значения по умолчанию.
const defaultId = 'blah/blah/blah'
const { data } = api.post.getById.useQuery({
id: router.query.id ?? defaultId,
});
Я изменил свой запрос следующим образом:
const { data } = api.post.getById.useQuery(
{
id: router.query.id as string,
},
{ enabled: !!router.query.id}
);
поэтому он начнется только тогда, когда router.query.id
не является пустым объектом.
Можно ли запустить запрос только тогда, когда useRouter вернул фактический запрос?