React项目中TS报错解决方案

2023-05-16

Umi&&React&&Vue3&&TS报错解决方案总结(个人向)

Redux开发工具报错window下没有某属性

解决方案,项目根目录创建global.d.ts文件

export { global }
/**
 *  解决redux开发工具报错
 */
declare global {
  interface Window {
    // 属性为redux开发工具对应属性
    // const composeEnhancers = window.__REDUX_DEVTOOLS_EXTENSION_COMPOSE__ || compose;
    // const store = createStore(persistedReducer, composeEnhancers());
    __REDUX_DEVTOOLS_EXTENSION_COMPOSE__: Function
  }
}

Store中reducer因为接口问题报错,ts类型不能分配问题

将reducer声明处定位指定属性或者any即可

ts写法useRef声明报错问题

const child: any = useRef<ReactNode>(null)
其中null为初始化声明,ReactNode是子组件的类型推断,any防止子组件使用时报错,面向any的ts写法…

Umi开启热刷新后persisit冲突无法持久化

暂未解决,目前只好关闭热刷新,保证persist正常运行

redux-persisit刷新无法持久化?

需要关注reducer文件中是否使用不可变对象,或者正确结构,否则会被覆盖,推荐使用immer等不可变对象操作

echarts自适应多种设备的时候,事件监听无法关闭?

正难则反,将echart取出,在外部去监听并关闭时候取消监听

//echart组件中
 useEffect(() => {
    let { myChart } = initoneEchart()
    // renderChart()
    console.log(myChart);
    const listener = () => {

      // if (!myChart) {
      //   console.log(22);
      //   window.removeEventListener('resize', listener)
      // }
      console.log(11);
      myChart && myChart.resize()
    }
    window.addEventListener('resize', listener)
    return () => {
      window.removeEventListener('resize', listener)
    }
  })
  /** echart初始化 **/
  // echarts
  const initoneEchart = () => {
    type EChartsOption = echarts.EChartsOption
    let chartDom = document.getElementById('container')!;
    let myChart = echarts.init(chartDom);
    let option: EChartsOption;

    option = {
      xAxis: {
        type: 'category',
        data: ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
      },
      yAxis: {
        type: 'value'
      },
      series: [
        {
          data: [820, 932, 901, 934, 1290, 1330, 1320],
          type: 'line',
          smooth: true
        }
      ]
    };

    option && myChart.setOption(option);
    return {
      myChart
    }
  }

React报错Invalid hook call. Hooks can only be called inside of the body of a function component.

检查react版本是否大于16.8,是否将useHooks等用在组件头部(官方规定)

umi的useRequset结构以及fetch解构

umi的request,useRequset底层也是fetch封装,需要多一个then返回res对象并以res.json()方式序列化导出,推荐不可变对象进行深拷贝导出复制等操作

  fetch('http://localhost:8000/api/users').then(res => res.json()).then(res => {
    console.log(res);
  })

umi的useModel使用问题

umi的plugin-initial-state使用问题

文档规定了在app.ts中写入一个async函数,注意,必须是async异步函数,否则报错,无法获取,且该插件必须与useModel搭配使用,即src/models 目录下有 hooks model 时启用.
useModel为umi封装的全局状态管理工具,后续微前端也推荐该方法使用进行父子项目通讯,

// src/app.ts
// 此处进行请求设置或者async异步操作警醒存取即可
export async function getInitialState() {
  const data = await fetchXXX();
  return data;
}

umi的plugin-initial-state使用后persist持久化报错问题

报错如下:TypeError: Cannot read properties of null (reading ‘_store’)
意思无法读取app.ts中缓存的数据,则无法拿到_store对象无法缓存,
缓存代码如下:

//其余代码没贴,此处是app.ts中dom更新及使用persist的diff计算并进行存储
window.addEventListener('DOMContentLoaded', () => {
  const app = getDvaApp()
  console.log(app, 997);
  persistStore(app._store)
})

React模板字符串生成dom后点击事件触发问题

需求是使用高德地图,生成marker后,点击marker有infowindow窗口,然后点击关闭按钮关闭窗口

 let infoWindow = initInfoWindow(e.data.name)
 infoWindow.open(mapBox, [e.data.lnglat[0], e.data.lnglat[1]]);
 //在生成infoWindow中的content内容区后,在进行dom获取和绑定,否则直接绑定会报错方法未定义及click事件不存在等错误
 let dom1: any = document.getElementById('info_click')
dom1.onclick = () => {
    mapBox.clearInfoWindow()
}

由于机制问题,会读取到空值,因此将DOMContentLoaded改为load即可正常

Umi-@qiankun配置微前端bug

报错1:Disconnected from the devServer, trying to reconnect…但可显示界面

**原因分析:**由于umi有node启动的环境以及websocket实施监听热刷新机制,因此,会出现该报错
方案一:配置的子应用socket端口应该放在主应用上
在/scr/.env文件中配置SOCKET_SERVER=‘主应用地址url’,但是,如果开发期间主应用没开启呢?那岂不是又要提示影响开发?
方案二:packjson中取消socket机制
在packjson中的启动项中加入如下代码
"start": "set PORT=8089 SOCKET_SERVER=none && umi dev",
重启一下即可

报错2:You are attempting to use a basename on a page whose URL path does not begin with the basename. Expected path “/” to begin with “/app1”

该报错并没爆红,但是出现了提示,有强迫症的哥们会想去掉,或者找到原因,于是…
方案1:在.umirc的配置中写入base路径?这个配置项目前被弃用,而且行不通
方案2:调整route的路径配置?虽然一定程度可行,但是等于重新调整结构,麻烦,且不彻底
方案3:在子应用中的umirc文件中得到defineConfig中写入base配置项为’/'即可,此时不报错,解决!
总结:报错1和报错2都是属于微应用的配置问题,如果出现配置后不生效问题,尝试重新刷新或者修改配置重启覆盖.umi文件的临时文件,或者删除.umi缓存重新修改,总之,可能是缓存导致没有生效,多尝试修改下即可

antd4版本中的upload组件业务bug解决

由于4版本的upload的事件仅有onChange无法像其他组件做到onSuccess一样处理,但是业务又要对成功的图片进行特殊处理,放到指定数组中并渲染视图**,且在onChange中写业务代码会有三次的执行特性,源于antd对上传的特殊处理,对此,有的版本会识别response.code==='‘200’'或者status==='done’去特殊识别,但是有的版本又无法通过该方法进行**,由此,我们考虑曲线救国,在beforeUpload事件中进行预处理,利用函数颗粒化beforeUpload={(e) => { handleBefore({ origin: e, upItem: item }) }},并在其中利用image的onload事件去处理成功上传后的业务代码

// beforeUpload={(e) => { handleBefore({ origin: e, upItem: item }) }}
const handleBefore = (e: any) => {
    const { origin, upItem } = e
    if (origin instanceof Blob) { // 类型检查
      const img = new Image();
      img.src = URL.createObjectURL(origin);
      img.onload = () => {
        URL.revokeObjectURL(img.src);
        // 后续处理
        if (upItem?.name === 'bills') {
          // 业务代码
          // createBillItem(1)
        }
        if (upItem?.name === 'udicode') {
         // 业务代码
         // createUdiItem(1)
        }
      };
    }
  }

未完待续…

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React项目中TS报错解决方案 的相关文章

  • 数据结构之循环队列基本操作(c语言)

    队列 xff1a 队列是一种先进先出 First In First Out 的线性表 它只允许在表的一端进行插入 xff0c 在另一端删除元素 允许插入的一端成为队尾 xff0c 允许删除的一端成为队头 循环队列的顺序表示和实现 xff1a

随机推荐

  • 数据结构——先序遍历的顺序创建二叉链表并中序遍历(C语言)

    先序遍历的顺序创建二叉链表并中序遍历 1 算法步骤 xff1a 1 xff09 扫描数字序列 xff0c 读入数字n 2 xff09 如果n是一个 0 数字 xff0c 则表明该二叉树为空树 xff0c 即T 61 NULL 否则执行一下操
  • 51单片机的系统扩展之8255A

    8255 xff1a 8255芯片是Intel公司生产的可编程并行I O接口芯片 xff0c 有3个8位并行I O口 具有3个通道3种工作方式的可编程并行接口芯片 xff08 40引脚 xff09 其各口功能可由软件选择 xff0c 使用灵
  • ESP8266一直闪蓝灯,不停复位的解决办法

    问题 xff1a 在一次下载中无意间将下载的文件选错 xff0c 再次下载完成后就突然一直闪蓝灯 xff0c 不停复位 这并不是ESP8266模组坏了 解决办法 xff1a 1 我们平常下载程序选择eagle flash bin和eagle
  • Markdown快速入门

    Markdown快速入门 1 代码块 96 96 96 c include lt iostream gt using namespace std int main cout lt lt 34 hello world 34 lt lt end
  • VSCode 如何让去掉 Pylint 展示的花里胡哨的警告

    Pylint 是一个 python 的语法检测器 xff0c 提升编程效率的同时其带来的花里胡哨的警告也是真让人看着难受 xff0c 就像下面这花花绿绿的波浪线 xff1a 这些警告种类极其丰富 xff0c 比如下面这样 xff1a Met
  • 01_HC-SR04超声波传感器(GPIO中断+定时器方式)

    1 简介 xff1a HC SR04 超声波测距模块可提供 2cm 400cm 的非接触式距离感测功能 xff0c 测 距精度可达高 3mm xff1b 模块包括超声波发射器 接收器与控制电路 2 工作原理 xff1a 1 采用 IO 口
  • Faster R-CNN论文解读

    文章目录 AbstractIntroduction缘由RPN训练方案 Faster R CNN整体流程Conv layersRPNclsreganchorTranslation Invariant AnchorsMuti Scale Anc
  • c语言输入字符时控制符%c前加空格的原因解释

    文章目录 一 前景知识1 缓冲区2 标准输入流 二 scanf语句的执行1 scanf对于整形 d的输入2 scanf对于字符 c的输入 在编一个代码时偶然间发现一个知识盲点 用scanf语句输入字符时需要在控制符 c前加空格 在解释相关这
  • 解决c++中头文件重复包含的问题

    前言 c 43 43 项目中经常会使用到自己定义的一些函数和接口 xff0c 我们通常在头文件中包含进来 xff0c 但这样存在头文件被多次包含的危险 xff0c 导致编译报错 xff0c 以下介绍了几种常用的解决方法 一 采用宏定义的方法
  • 华为交换机5700 SSH配置

    一 在本地设备服务端生成密匙 Huawei rsa local span class token operator span span class token keyword key span span class token operat
  • 函数模板、类模板

    泛型编程 泛型编程 xff1a 编写与类型无关的通用代码 xff0c 是代码复用的一种手段 模板是泛型编程的基础 函数模板 函数模板代表了一个函数家族 xff0c 该函数模板与类型无关 xff0c 在使用时被参数化 xff0c 根据实参类型
  • STM32 第4讲 STM32原理图

    本文为学习正点原子得笔记 xff0c 主要讲解STM32原理图绘制 xff0c 主要由最小系统 43 IO口分布两步完成 引脚分布 STM引脚分类 xff1a 电源引脚晶振引脚复位引脚下载引脚 xff1a JTAG SWD 串口 JTAG
  • STM32 第12讲 GPIO:结构/8种工作模式/寄存器/驱动模型/配置步骤/实验

    文章目录 GPIO简介GPIO特点电气特性GPIO引脚分布 GPIO8种工作模式GPIO的基本结构8种工作模式 GPIO寄存器GPIO端口模式寄存器 xff08 GPIOx MODER xff09 GPIO端口输出类型寄存器 xff08 G
  • PID/LQR/MPC自行总结使用

    PID LQR MPC自行总结使用 自学控制相关知识 xff0c 已经一年多了 xff0c 现在回头看看还是有很多模糊不明确的地方 xff0c 准备借此机会进行总结一下 xff0c 第一次写博客 xff0c 如果错误和不合理之处 xff0c
  • 对 torch.nn.Linear 的理解

    torch nn Linear 是 pytorch 的线性变换层 xff0c 定义如下 xff1a Linear in features int out features int bias bool 61 True device Any N
  • rosdep init 错误解决终极方法(药到病除)

    rosdep init 错误解决方法 一 安装ROS执行以下指令时报错二 原因三 解决办法1 查询IP地址2 将IP地址添加进文件3 重新执行指令 成功解决 xff01 xff01 xff01 一 安装ROS执行以下指令时报错 sudo r
  • Intel Realsense T265 在ubuntu下的环境配置

    Intel Realsense T265 在ubuntu下的环境配置 一 T265介绍二 realsense SDK 安装配置1 注册服务器的公钥2 将服务器添加到存储库列表3 安装所需的库 xff0c 开发者和调试包5 插上T265打开
  • SLAM图优化一

    前言 SLAM问题的处理方法主要分为滤波和图优化两类 滤波的方法中常见的是扩展卡尔曼滤波 粒子滤波 信息滤波等 xff0c 熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的 实时的处理数据并矫正机器人位姿 比如基于粒子滤波的SLAM的
  • 编程实现MapReduce操作

    文章目录 一 MapReduce的WordCount应用二 Partitioner 操作三 xff0e 排序实现四 xff0e 二次排序实现五 hadoop实现六 出现的问题与解决方案 提示 xff1a 以下是本篇文章正文内容 xff0c
  • React项目中TS报错解决方案

    Umi amp amp React amp amp Vue3 amp amp TS报错解决方案总结 个人向 Redux开发工具报错window下没有某属性 解决方案 项目根目录创建global d ts文件 span class token