Ссылка Nextjs с объектом URL не работает при использовании идентификатора элемента в имени пути

Я добавил переводы на свой веб-сайт, что требует от меня использования объекта URL при создании ссылок. У меня нет никаких проблем с этим нигде, кроме случаев, когда я хочу щелкнуть ссылку, указывающую, например, на /#contact.

когда я просто использую href='/#contact' это будет работать. Но если бы я использовал href = {{ pathname: "/#contact", query: query }}, это не помогло бы.

Я уже просмотрел документацию next/link, и она показывает эти вещи только по отдельности, но не при совместной работе.

При использовании формата объекта URL в href значения будут закодированы в URL (что означает, что # становится %23). Вместо этого вы также можете передать параметры запроса в href в виде строки, например. href = "/#contact?param=value".

juliomalves 04.12.2022 13:52
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
0
1
422
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Может быть, этот комментарий поможет вам?

Редактировать: Действительно, похоже, что с запросом /#contact преобразуется в %23contact. Это тоже ваша проблема? Если это так, в качестве обходного пути вы можете проанализировать параметры запроса и использовать только href как таковой:

import Link from 'next/link';
import React from 'react';

const Contact = () => {
  const query = { name: 'john', age: 10 };

  const params = Object.keys(query).reduce(
    (acc, el, index) =>
      acc.concat(`${index === 0 ? '?' : '&'}${el}=${query[el]}`),
    '',
  );

  return (
    <div>
      <Link href = {`/#contact${params}`}>Click me</Link>
    </div>
  );
};

export default Contact;

Что приводит к http://localhost:3000/#contact?name=john&age=10

Боюсь, нет, использование href = "/#contact" as = {{ pathname: "/#contact", query: query }} не работает

Michael Vanhoutte 25.11.2022 05:42

поскольку я не могу публиковать код в комментариях, я отредактировал свой ответ, указав потенциальное обходное решение @MichaelVanhoutte

Jérémy Rippert 25.11.2022 09:58

Боюсь, это не работает. Вероятно, это связано с тем, что запрос, который я использую, является функцией next-export-i18n const [query] = useLanguageQuery();

Michael Vanhoutte 30.11.2022 05:41
Ответ принят как подходящий

Я нашел это решение href = {{ pathname: "/", query: query ,hash: "contact"}}, и оно работает для меня.

Другие вопросы по теме