Вы можете решить эту проблему, изменив push()
в пределах Courses.js
на путь относительно корня, соответствующий вашему определению Route
. Обратите внимание на прямую вспышку /
в начале и удаление ${path}
:
this.props.history.push(`/courses/course/${course.id}`, {
title: course.title
});
Вот рабочая разветвленная Песочница , включающая несколько разных подходов к этой проблеме.
Другой подход заключается в использовании Link или NavLink вместо <article>
с onClick
и с push()
до history
. Вы по-прежнему можете передавать государственное свойство title
, как вы в настоящее время используете Link
или NavLink
. Это именно то, для чего Link
и Navlink
должны были использоваться:
{this.state.courses.map(course =>
<Link
key={course.id}
to={{
pathname: `/courses/course/${course.id}`,
state: { title: course.title }
}}
>
{course.title}
</Link>
)
Это сделало бы элемент фактическим <a>
, шаблон также открыл бы дверь для использования чего-то вроде NavLink , который мог бы выставить "активный" класс стилей для стилей при необходимости.
Вы можете также рассмотреть возможность упрощения Route
и Link
для соответствия более стандартным соглашениям:
<Route path="/courses/:id" exact component={Courses} />
// ...
<Link
className="Course"
key={course.id}
to={{
pathname: `/courses/${course.id}`,
state: { title: course.title }
}}
>
{course.title}
</Link>
Надеюсь, это поможет!