8月大杂烩
使用类选择器时,如何指定多个类名?
比如我们想要选择的元素有三个类名classA, classB, classC,那么选择器可以这样写:
1 | document.querySelector('.classA.classB.classC') |
只要将三个类名连接起来就行,中间不需要加空格。
为什么我的请求在Chrome开发者工具中看不到?
今天和同事调试代码时发现一个奇怪的现象,有一个api调用,在浏览器开发者工具中的network面板中竟然看不到它的response,研究了半天也没找到原因,后来发现是因为调用api之后,使用了window.location.href = path
- 这句代码会导致页面进行一个强制刷新,所以api调用的记录也被刷掉了,response面板中也看不到。
如果要修复这个问题,可以使用useNavigate
代替,代码如下:
1 | import { useNavigate } from 'react-router-dom'; |
使用JSON.parse时一定要注意异常处理
一个好的习惯是,始终用try-catch
包裹JSON.parse
,以防止解析失败导致的错误。例如:
1 | try { |
JSON.parse非常容易出错,当传入的参数是空字符串, undefined
或不合法的JSON字符串时,都会抛出异常。因此,始终使用try-catch
来捕获这些异常是一个好的习惯。
1 | JSON.parse(undefined); // Uncaught SyntaxError: "undefined" is not valid JSON |
要点:
- 永远不要传递
undefined
、null
或空字符串
给JSON.parse
。 - 如果要解析空字符串,应该用
JSON.parse('""')
来代替。 - 虽然
null
不会直接导致异常,但解析结果是null
,这可能导致后续代码出错,因为我们总要访问解析结果中的字段。
如何对指定目录运行单元测试?
随着项目的进行,测试用例会越来越多,跑一次完整的测试需要的时间也水涨船高,如果我们只修改了某一个功能,那么可以只对这个功能进行单元测试。
下面的命令只对user
目录运行单元测试,这个命令有个前提,那就是你的测试用例都放到src/__tests__/
目录下。
1 | npm run test -- src/__tests__/pages/user |
如果你的测试用例是跟随业务功能代码的结构放置的,那么可以使用以下命令:
1 | npm run test -- src/pages/user |
也就是说,无论使用哪种方式,都要保证指定的目录下有对应的测试用例。
Ant Design Table中如何隐藏某一列?
1 | const columns = [ |
‘Button’ refers to a value, but is being used as a type here. Did you mean ‘typeof Button’?
组件代码如下,就这么简单的一个组件,竟然能出现上面的问题。真是服了!
1 | import { Button } from 'antd'; |
仔细检查了半天也没有发现问题所在,后来一看是文件名不对!React组件文件的扩展名应该是jsx
或者tsx
,而不是js
或者ts
。而我这个组件的扩展名恰恰是.ts
,将它改为.tsx
后问题就解决了。
限制输入框文本长度
有两种方式,一种是在Form.Item中的rules中添加max
属性,另一种是在Input组件中添加maxLength
属性。
在Form.Item中添加max属性
这种方式的好处是,如果超出长度限制,会自动显示提示信息,但是用户仍然可以继续输入。
1 | <Form.Item |
在Input组件中添加maxLength属性
这种方式的好处是,用户输入超过长度限制时,会被直接阻止输入。弊端是没有提示信息。
1 | <Input maxLength={10} /> |
如果既要限制输入长度,又要提供提示信息,可以结合使用两种方式,在实际使用中,可以将MaxLength
提取成公共变量,这样可以避免重复代码:
1 | const MaxLength = 10; |