Я использую Next JS s useRouter
для доступа к маршрутизатору следующим образом:
const router = useRouter();
, но, тем не менее, когда мой компонент отображается, я обычно замечаю, что router
может быть null
, пока не будет создан экземпляр. Моим обходным путем было бы что-то вроде этого:
const router = useRouter();
if (!router) return null;
return (
// ... jsx
);
Однако у меня есть собственный крючок, который я использую, и он зависит от запросов маршрутизатора:
const router = useRouter();
if (!router) return null;
const {data} = useCustomHook(router.query.id);
return ( //.... )
Но я получаю ошибка eslint, например:
React Hook "useCustomHook" is called conditionally. React Hooks must be called in the exact same order in every component render. Did you accidentally call a React Hook after an early return?
Мой обходной путь - создать два отдельных компонента для обработки этого условия:
const HookComponent = ({ id }) => {
const { data } = useCustomHook(id);
return ( // ....)
}
const HookComponentWrapper = () => {
const router = useRouter();
if (!router) return null;
return <HookComponent id={router.query.id}/>
}
Мой вопрос: можно ли избежать добавления этого оболочка только для условного?