Вы можете передавать данные через путь (URL), то есть через сопоставление URL или параметры запроса, или через состояние маршрута.
Ссылка на объект
Объект, который может иметь любое из следующих свойств:
- pathname: строка, представляющая путь к ссылке.
- search: Строковое представление параметров запроса.
- га sh: га sh для вставки в URL, например # a-ha sh.
- состояние: состояние для сохранения в местоположении.
У вас явно есть настройка маршрута для варианта pathname с параметром маршрута title
.
"/CreateProfile/:title"
Вам просто нужно создать ссылку, чтобы в нее было встроено правильное значение title
.
<Link to={{ pathname: "/CreateProfile/<some title value>" }} >
Create Profile
</Link>
Отсюда вам нужен только доступ к маршруту match.params.title
, поскольку вы правильно сделано.
Теперь , в случае редактирования профиля маршрута, "/EditProfile"
есть, OF C, нет параметра соответствия маршрута (и нет параметров запроса), поэтому правильный способ заключается в использовании состояния маршрута.
<Link
to={{
pathname: "/EditProfile",
state: {
profile,
title: 'Edit Title',
},
}}
>
Edit Profile
</Link>
и правильном доступе к состоянию маршрута из history
объекта
useEffect(() => {
const { history, match } = props;
if (match.params.title) {
setTitle(match.params.title);
} else if (history.location.state.title){
setTitle(history.location.state.title);
}
if (history.location.state.profile) {
setProfile(history.location.state.profile)
console.log("profile: ", history.location.state.profile)
}
}
Совет по поводу состояния маршрута, однако путь к объекту не t всегда гарантированно существует (т. е. определяется) от props.history.location
до конечного значения, к которому вы обращаетесь, поэтому необходима защита, чтобы предотвратить ошибки «access blah of undefined».
// state may not be defined depending on which route the app took to get to the page
history.location.state && history.location.state.title