javascript - 如何在反应 js 中将值推送到 url?
问题描述
我想在这样的输入的 onChange 方法中将一些文本推送到 url 路由:
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 或如何从 react 中的任何位置手动推送一些文本以路由 url?
解决方案
错误消息表明history
prop is 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
,请参阅:
推荐阅读
- docker - 将 Schema-Registry Docker 容器连接到 AWS MSK
- c# - 在基类中创建工厂函数,但如果在其子类之一上调用它们则无法访问
- kotlin - 需要说明:类型不匹配需要:未找到:MyItem
- python-3.x - 在类中声明二维数组时出现名称错误
- javascript - 如何写入对象内的嵌套数组
- excel - 从第 2 行从左到右排序范围
- laravel - 如何运行从 cPanel 下载的 Laravel 项目?
- db2 - 尝试在 DB2 中使用 UDF 运行动态 sql
- javascript - 转换为对象并将属性添加到数组的对象
- android - 同步成功后,同步网关不删除文档,Android App 正在赶上文档