各种问题解决方案积累

1、Unexpected lexical declaration in case block

正如字面意思一样:case块中意外的词法声明,是一个eslint(no-case-declarations)的报错
例如:下面代码就会报错

switch (name) {
	case 'zhangsan':
		const tem = '张三'
		break;
	case 'Search':
		const tem = '李四'
		break;
	defaultbreak;

解决办法:两种

  1. 添加块级作用域 { } ,使用 { } 将 case 包裹起来
  2. 直接忽略 eslint 校验吧
switch (name) {
	case 'zhangsan':{
		const tem = '张三'
		break;
	}
	case 'Search':
		// eslint-disable-next-line no-case-declarations
		const tem = '李四'
		break;
	defaultbreak;

2、模块“"…/…/node_modules/umi/types"”没有导出的成员“router”。你是否指的是“Router”?ts(2724)

umi2 升级 umi3 后使用 router 报错
umi3 使用 router 报错
由于 umi3 将 router 改成 history 了,使用 history 即可

import { history } from 'umi';
history.push('/app/index');

3、gitlab CI 中报错 Module ‘"…/…/node_modules/umi/types"’ has no exported member ‘history’. Did you mean ‘History’

lint 的 script 中添加 yarn run postinstall 指令,package.json中添加 postinstall 命令
"postinstall": "umi generate tmp",

lint:
    script:
        - "yarn run postinstall"
        - "yarn run lint:tsc"
        - "yarn run lint:es"

4、antd4 中 Menu 中使用 inonfont 的 Icon 菜单折叠无法隐藏 title

添加 anticon 类名,menu 中是通过该命名设置样式的

const RouterIcon: React.FC<RouterIcon> = ({ type }) => {
    return (
        // 必须加上 anticon 的样式,否则 menu 无法处理
        <svg className={`anticon ${styles.icon}`}>
            <use xlinkHref={`#${type}`} />
        </svg>
    );
};

<SubMenu title={item.name} icon={<RouterIcon type={item.icon} />} key={item.key || item.path}>
	<Menu.Item></Menu.Item>
</SubMenu>

<Menu.Item key={item.key || item.path} icon={<RouterIcon type={item.icon} />}>
	<Link to={item.path}>{item.name}</Link>
</Menu.Item>

5、axios 的 delete方式使用

  1. 参数放在 query 中
const delete = param =>
    http
        .delete(`url`, { params: param })
        .then()
        .catch();
  1. 参数放在 body 中
const delete = param =>
    http
        .delete(`url`, { data: param })
        .then()
        .catch();

6、找不到模块xxx或其相应的类型声明。ts(2307)

场景1(没有declare声明)

使用 import help from 'app';报错 找不到模块app或其相应的类型声明。ts(2307)

解决方案

typing.d.ts 文件中添加

declare module 'app' {
    const help: any;
    export default help;
}

场景2(typing.d.ts 文件中使用了 import 引入类型)

import { Help } from './typings';

declare module 'app' {
    const help: Help;
    export default help;
}

解决方案 方案来源(访问链接需要翻墙)

type Help = import('。/typings').Help;

declare module 'app' {
    const help: Help;
    export default help;
}

7、 dva 启动报错 ./node_modules/history/esm/history.js

2.4.1版本的dva会有这个问题 issue
解决办法:升级dva版本或者按照issue中的解决

8、使用 moment 报waring Deprecation warning: value provided is not in a recognized RFC2822 or ISO format

在这里插入图片描述

9、使用jest + ts测试函数无法引用@路径,报错“找不到模块“@/util/dict”或其相应的类型声明”

参考链接
在这里插入图片描述

  1. 根目录添加 jest.config.js 配置文件(umi的话会和本身umi自带的进行merge)
  2. 根据 tsconfig.json 中的配置进行 moduleNameMapper 配置
    举例
"paths": {
    "@/*": ["src/*"],           
},
module.exports = {
    moduleNameMapper: {
        '@/(.*)': '<rootDir>/src/$1',
    },
};

10、Promise.allSettled 使用

查询地址
在这里插入图片描述

useEffect(() => {
        Promise.allSettled([getDealerNames(), getAllUploaderList(), getAllCustomerSuccess()]).then(
            ([dealer, uploader, customer]) => {
                setDealerNames(dealer.status === 'fulfilled' ? dealer.value.dealers : []);
                setUploaderList(uploader.status === 'fulfilled' ? uploader.value.uploader : []);
                setCustomerSuccessList(customer.status === 'fulfilled' ? customer.value.customersuccess : []);
            }
        );
    }, []);

11、window. location.href 循环下载多个url

// 延时器
const sleep = (gap: number) => return new Promise(resolve => sleepRef.current = window.setTimeout(resolve, gap));
// 循环下载
const downloadMultiUrl = async (urlList: string[]) => {
    const handleDownload = async (url: string) => {
        if (url) {
            await sleep(1000);
            window.location.href = url;
        }
    };
    const downList = [];
    for (const item of urlList) {
        downList.push(handleDownload(item));
    }
    await Promise.all(downList);
};

12、浏览器直接预览PDF文件(不使用pdf.js)

方案一(推荐)

// originFileObj 是读取的文件对象,如上传组件读取到的
const fileURL = URL.createObjectURL(originFileObj);
window.open(fileURL);

方案二(有些文件打不开,原因没找到,建议用第一种)

// 用 FileReader 解析 originFileObj 得到 base64 然后使用浏览器直接打开一个嵌有 iframe 的tab
if (window.FileReader) {
    const fr = new FileReader();
    fr.onloadend = e => {
        if (typeof e.target?.result === 'string') {
            const pdfWindow = window.open('');
            pdfWindow?.document.write(
                `<iframe width='100%' height='100%' src='${encodeURI(e.target.result)}'></iframe>`
            );
        }
    };
    fr.readAsDataURL(originFileObj);
}
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
作为嵌入式工程师,面对各种问题是家常便饭。以下是一些常见问题以及解决方法: 1. 系统崩溃或死机 可能原因: - 软件错误,例如指针越界、内存泄漏等 - 硬件故障,例如电源问题、信号问题等 - 软硬件不匹配,例如驱动程序与硬件不兼容等 解决方法: - 使用调试工具,例如GDB、JTAG等,定位问题所在,并进行修正 - 分析崩溃信息,例如打印日志、生成内存转储等,出错误原因 - 如果是硬件问题,需要进行硬件排查和修复 2. 性能问题 可能原因: - 程序设计不合理,例如算法效率低下、数据结构不当等 - 系统配置不合理,例如占用资源过多、任务调度策略不当等 解决方法: - 重新设计程序,优化算法、数据结构等 - 调整系统配置,例如调整任务优先级、优化资源使用等 3. 编译问题 可能原因: - 编译器版本不兼容 - 编译选项设置错误 - 代码中存在语法错误或语义错误 解决方法: - 更新编译器版本 - 检查编译选项是否正确 - 使用调试工具,查代码中的错误 4. 硬件调试问题 可能原因: - 电路设计问题,例如电源不稳定、信号干扰等 - PCB设计问题,例如走线不当、接口不匹配等 - 其他硬件故障,例如元器件损坏、焊接问题等 解决方法: - 检查电路设计是否合理,例如是否存在电源冲突、信号干扰等 - 检查PCB设计是否合理,例如是否存在走线不当、接口不匹配等 - 使用仪器进行硬件排查,例如万用表、示波器等 总之,嵌入式工程师需要具备良好的问题分析和解决能力,同时熟练掌握调试工具和技巧。在实践中不断积累经验,才能更好地应对各种问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值