Назначение составной ссылки с использованием ссылки Gatsby через реквизиты

У меня есть компонент под названием Plan, который использует компонент Gatsby Link. Это выглядит примерно так:

const Plan = props => (
  ...
  <Button>
    <Link to = {props.goTo}>Learn More</Link>
  </Button>
  ...
)

Это позволяет мне использовать компонент следующим образом: <Plan goTo='events' />, который создаст следующий URL-адрес: www.sitename.com/events.

Однако я действительно хочу, чтобы каждый URL-адрес включал каталог advertise следующим образом: www.sitename.com/advertise/events. Однако я не хочу включать advertise в реквизит goTo.

Чтобы получить этот результат, я попробовал следующее:

const Plan = props => (
  ...
  <Button>
    <Link to=`advertise/${props.goTo}`>Learn More</Link>
  </Button>
  ...
)

Но это не работает.

Итак, мне интересно, как я могу это сделать.

Есть идеи?

Обновлено:

Просто для ясности - вот как я использую компонент:

  <Plan goTo = "events" />
  <PLan goTo = "banner-ads" />

В настоящее время это приводит к следующему HTML (с удаленными именами классов):

<button><a href = "/events">Learn More</a></button>
<button><a href = "/banner-ads">Learn More</a></button>

Я хочу использовать компонент в точно так же (<Plan goTo='events' />), но HTML должен быть немного другим:

<button><a href = "/advertise/events">Learn More</a></button>
<button><a href = "/advertise/banner-ads">Learn More</a></button>

[обратите внимание на добавление /advertise в начале атрибута href]

Не могли бы вы добавить некоторые детали в этот отчет? Что происходит, когда вы загружаете эту страницу, наводите курсор на ссылку и нажимаете на нее?

Jake Worth 18.07.2019 16:40

@JakeWorth Пожалуйста, посмотрите новый раздел «Обновление», который я добавил к своему вопросу.

Moshe 18.07.2019 16:55

Показанные вами JSX и HTML не совпадают. advertise/${props.goTo} не должен производить /events. Возможно, у вас есть несохраненный файл, сервисный работник или какая-то другая проблема с настройкой?

Jake Worth 18.07.2019 17:06

@JakeWorth Эти JSX и HTML были неудачной попыткой получить результат, который я ищу. Я поставил это в вопрос просто, чтобы показать, чего я пытаюсь достичь. Сейчас я использую <Link to = {props.goTo}>Learn More</Link>. Что бы я хотел, как изменить этот код, чтобы /advertise/ автоматически добавлялся в начало каждого URL-адреса.

Moshe 18.07.2019 17:33

Хорошо, спасибо, что разъяснили это. Я думаю, что ваше решение сработало бы с фигурными скобками; см. мой ответ ниже.

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

Ответы 1

Ответ принят как подходящий

Заключите обратные кавычки в фигурные скобки:

<Link to = {/`advertise/${props.goTo}`}>Learn More</Link>

Фигурные скобки сообщают JSX, что ему нужно интерпретировать содержимое как JavaScript.

Если вы добавляете /advertise к каждому пути, рассмотрите возможность добавления этого к вашему Префикс пути Гэтсби.

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