#javascript #reactjs #react-router #react-router-dom
#javascript #reactjs #react-маршрутизатор #react-router-dom
Вопрос:
Я хочу вставить некоторый текст в URL-маршрут в методе onChange для ввода, подобном этому :
function Header(props) {
return (
<div>
<input type="radio" onChange={ (e)=> props.history.push(`/${e.target.value}`) } >
</div>
)
Но это выдает множество ошибок и сбоев :
TypeError: Cannot read property 'push' of undefined
Как правильно использовать history.push или как я могу вставить некоторый текст для маршрутизации url вручную из любого места в react?
Комментарии:
1. Вы пытаетесь изменить маршрут при изменении радиовхода?
2. @Yousaf да, сэр
Ответ №1:
Сообщение об ошибке предполагает, что history
prop является undefined
, то есть оно не передается вашему компоненту в качестве prop, что может произойти в зависимости от иерархии компонентов в вашем приложении.
Используйте один из следующих вариантов, чтобы получить доступ к history
:
-
Используйте
useHistory
перехватimport { useHistory } from 'react-router-dom'; function Header(props) { const routerHistory = useHistory(); return ( <div> <input type="radio" onChange={(e)=> routerHistory.push(`/${e.target.value}`)}> </div> ) }
-
Используйте
withRouter
компонент более высокого порядкаimport { withRouter } from 'react-router-dom'; function Header(props) { return ( <div> <input type="radio" onChange={(e)=> props.history.push(`/${e.target.value}`)}> </div> ) } export default withRouter(Header);
Подробнее о withRouter
и useHistory
см.: