Как отправить реквизиты компонентам по ссылке / маршрутам из react router dom?

#reactjs #react-router

Вопрос:

Как говорится в названии, как отправлять данные реквизиту от одного компонента к другому по ссылке. Вот как я это делаю сейчас, но из-за этого URL-адрес в браузере становится слишком большим, и я чувствую, что это не так, как вы это делаете, но вот как я это сделал:

У меня есть один компонент, называемый Маршрутами.js, где я храню все свои маршруты вот так:

     {
    path: "/edit/:id/:name/:email/:status/:gender/:title/:method",
    component: ActionsPage,
    exact: true,
  },
 

Как вы можете видеть, этот путь становится слишком большим, так как они :name и т. Д. На самом деле являются моими параметрами, и в компоненте, в котором мне нужны эти реквизиты, Я поместил это:

 let { id, name, email, status, gender, title, method } = useParams();
 

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

Ответ №1:

Вы могли бы просто передать несколько реквизитов Link из react-router .

В следующем примере toPathWithProps сохраняется как пункт назначения pathname , так и props то, что вы хотели бы передать. Здесь мы проходим param1 как props .

 // your link creation
const toPathwithProps = { 
  pathname: "/page", 
  param1: "Par1" 
};

// link to the "location"
<Link to={toPathwithProps}> </Link>
 

param1 будет найден в компоненте props назначения. Но помните, что если пользователь перейдет к /page без использования Link тега, » нет props » не будет передано.

Итак, допустим, компонент «меню» перенаправляет на страницу «редактировать» (страницу, которую вы упоминаете в своем вопросе). Для этого все, что вам нужно сделать, это добавить Link тег в свой компонент «меню». Пример:

     <Link to={
      pathname: "/edit", 
      user: {id:props.id,name:props.name,email:props.email}}>
      Edit Profile </Link>
 

Таким образом, пользователь просто нажимает на кнопку Link и переходит на страницу «редактировать». Компонент «редактировать» сможет получить доступ к user информации в своих реквизитах. Потому что мы проходили мимо них, как params в Link .

Теперь вам не нужно использовать полный путь /edit/:id/:name/:email/:status/:gender/:title/:method , который вы можете использовать просто /edit

Комментарии:

1. Я не уверен, что это работает для моего компонента. Где мне это создать и что мне делать со своим маршрутом. компонент js, я тоже изменяю путь туда или нет, не могли бы вы объяснить, пожалуйста?

2. вместо полного пути: «/редактировать/:идентификатор/:имя/:электронная почта/:статус/:пол/:название/:метод» вы можете просто использовать путь: «/редактировать». И передайте параметры (идентификатор,имя,адрес электронной почты и т. Д.) Через тег ссылки. Позвольте мне отредактировать свой ответ