Почему мои параметры запроса не существуют при использовании useRouter? nextjs - PullRequest
0 голосов
/ 16 января 2020

У меня есть следующий js маршрут, который находится на пути. Вот URL

localhost:8080/eft-files/133722?enableRegen=true.

В моей папке /pages приведен код, который я использую для получения параметров запроса.

const EftFileViewWrapper = () => {
  const {
    query: { eftFileId, enableRegen }
  } = useRouter();

  return (
    <EftFileView
      eftFileId={eftFileId}
      enableRegen={enableRegen}
    />
  );
};

Когда приложение маршрутизируется через next/link, изначально enableRegen равняется true, но этот файл попадает во второй раз, а enableRegen затем undefined. eftFileId всегда заселен.

Если я сделаю жесткую ссылку sh на странице и не перенаправлю ее через next/link, я всегда получаю правильные значения для всех параметров запроса.

I Я должен был использовать URLSearchParams, чтобы сделать эту работу, например:

const EftFileViewWrapper = () => {
  const {
    query: { eftFileId, enableRegen }
  } = useRouter();

  let params = isInBrowser && new URLSearchParams(location.search);

  return (
    <EftFileView
      eftFileId={eftFileId}
      enableRegen={enableRegen || params.get("enableRegen")}
    />
  );
};

Я бы предпочел остаться в следующей js экосистеме, но я не уверен, что делать. Есть идеи?

1 Ответ

0 голосов
/ 20 апреля 2020

useRouter работает только с путями и не анализирует параметры запроса.

Я предлагаю вам использовать window.location, чтобы получить параметры поиска, а затем проанализировать его с помощью URLSearchParams. Конечно, проверьте, что объект window представлен:

let enableGen = false

if (typeof window !== "undefined") {
  const params = new URLSearchParams(window.location.search)
  enableGen = params.get("enableRegen")
}
...