Эта ошибка вызвана тем, что реквизит match
не определен в компоненте <User/>
, когда сопоставляется маршрут "/pl/panel/user/:id"
, что, в свою очередь, означает, что при обращении к params.id
возникает исключение.
Есть несколько решений, чтобы решить эту проблему - простое решение - указать User
компонент в его <Route/>
через component
prop:
<Route path="/pl/panel/user/:id" component={User} />
By указав таким образом компонент User
, реагирующий маршрутизатор автоматически вставит реквизит match
в User
, когда маршрут соответствует и компонент отрендерен.
Другой вариант - использовать withRouter
:
import { withRouter } from "react-router-dom";
/* Your current User component left as is */
const User = (props) => { ... }
/* Router injected into User */
const UserWithRouter = withRouter(User);
<Route path="/pl/panel/user/:id">
{/* Use UserWithRouter instead, match will now be defined in User */}
<UserWithRouter />
</Route>
withRouter
HO C имеет тот же эффект, что и первый подход, в результате чего match
реквизит вводится в целевой компонент (ie User
) при визуализации компонента UserWithRouter
.
Обновление
Ошибка 404, возникающая при обновлении браузера, вероятна из-за несовместимой клиентской и серверной маршрутизации ,
Например, при переходе к маршруту /pl/panel/user/1
на клиенте и последующем обновлении страницы на ваш сервер будет отправлен запрос ресурса /pl/panel/user/1
. Поскольку сервер не знает, как с этим справиться, обычно возвращается 404.
Простым решением было бы заменить <BrowserRouter>
на <HashRouter>
в коде на стороне клиента. Это префикс вашего пути к URL-адресу #
, однако это позволит вам выполнить перезагрузку без каких-либо изменений в вашем бэкэнде.
Надеюсь, это поможет!