Ken428965 2022-11-17 00:54 采纳率: 53.4%
浏览 2
已结题

react,将class组件的代码改成函数组件的代码后报错?

在使用的react版本如下:

img


在使用class组件时,期间用到this.props.history.push这段代码,chrome浏览器报错:

img


部分代码如下:

renderHousesList() {
    return this.state.housesList.map(item => (
      <HouseItem
        onClick={() => this.props.history.push(`/detail/${item.houseCode}`)}
        // onClick={() => <Link to={"/detail/" + item.houseCode} />}
        key={item.houseCode}
        src={BASE_URL + item.houseImg}
        title={item.title}
        desc={item.desc}
        tags={item.tags}
        price={item.price}
      />
    ))
  }

为解决此问题,在网上搜索了一些方法,例如:
1、把this.props.history.push改成Link to(如上注释掉的代码所示),点击后浏览器没有报错也没有反应(故此方法无效);
2、使用withRouter(withRouter已在es6里被移除了,故此方法可行性不高);
3、在父组件里传值写一段代码,如history={this.props.history},然后在子组件里等于一个history.push(this.props.history.push所在的组件的父组件为node_modules里的组件Route.Provider,不希望修改其代码以免造成其他难处理的问题,故此方法也可行性不高);
4、把class组件里的所有代码改成函数组件的代码,然后使用hook,将this.props.history.push改成navigate(本class组件里的的代码有几百行,虽然修改成函数组件的代码不会太费事,但修改后陆续报各种各样的错误,如百度地图的getZoom方法未定义等等,故此方法可行性也不高)。

img

请问还有什么简便的方法可以解决this.props.history.push报错的问题?

  • 写回答

1条回答 默认 最新

  • 崽崽的谷雨 2022-11-17 08:46
    关注

    https://blog.csdn.net/qq_36493878/article/details/123015664

    react -router v6 类组件 不支持 路由写法 。想用 就得自己封装一个 高阶 组件 withRouter .上面的文章里 有代码和使用方法

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 已结题 (查看结题原因) 11月17日
  • 已采纳回答 11月17日
  • 创建了问题 11月17日

悬赏问题

  • ¥15 关于arduino编程toCharArray()函数的使用
  • ¥100 vc++混合CEF采用CLR方式编译报错
  • ¥15 coze 的插件输入飞书多维表格 app_token 后一直显示错误,如何解决?
  • ¥15 vite+vue3+plyr播放本地public文件夹下视频无法加载
  • ¥15 c#逐行读取txt文本,但是每一行里面数据之间空格数量不同
  • ¥50 如何openEuler 22.03上安装配置drbd
  • ¥20 ING91680C BLE5.3 芯片怎么实现串口收发数据
  • ¥15 无线连接树莓派,无法执行update,如何解决?(相关搜索:软件下载)
  • ¥15 Windows11, backspace, enter, space键失灵
  • ¥15 cfx离心泵非稳态计算