一些小的知识点,react 中传递 html5 自定义属性,antd/es vs antd/lib 以及 key 属性奇怪的设定,less 中 ~ 的含义,stopImmediatePropagation 的作用,以及 file input accept
react
当你创建自定义组件时,直接传递 html5 自定义属性时,是不会自动作用在组件根元素上的,你可以在 props 对象解构时,使用 rest 参数接受剩余参数,然后在根元素上进行展开运算符进行传递。
应用场景:埋点支持的某些 tag 等
antd
在使用 antd 时,有时候我们需要导入一些类型等,直接从 antd 中是找不到的,就需要去具体的组件中去找,这时候你的选择有
- antd/es
- antd/lib
查找 issue 中大概提到
- 能从 antd/lib 导入的,通常 antd/es 中也会有
- TreeShaking 只能 es module 才支持。编译成 lib 一定是全量引入的
因此为了避免全量导入,请使用 antd/es。
在使用 antd 组件时有一个问题,给元素设置 key 属性配合 enum 使用时,当 enum 没有显示赋值为字符串值时,类型会报错。
大概报错内容为,key 的值应该是 string 或 undefined。
查看 key 属性的类声明,跳转到了 antd 中去,其中将 key 属性声明成了可选的 string 才导致了这个问题。
在 4.0.3 版本中存在,今天发现在 4.3.5 版本中改问题得到了解决。
在 4.3.5 版本中,key 属性类型归 react 管,react 设置的类型为可选的 string | number,由此可见,应该是之前版本的 antd 画蛇添足所致。
less
Less 中 ~ 的含义
- import 路径中的 ~ 是 less-loader 提供的路径别名机制
- 表达式中带的,表示不由 Less 计算编译出结果,而是保持原样输出
stopImmediatePropagation
如果有多个相同类型事件的事件监听函数绑定到同一个元素,当该类型的事件触发时,它们会按照被添加的顺序执行。如果其中某个监听函数执行了 event.stopImmediatePropagation() 方法,则当前元素剩下的监听函数将不会被执行。
file type
今天查看 mdn 发现,当我们使用文件选择器时,针对 accept 属性,不仅可以手动声明具体的格式列表,也可以关键字指定所有类型,比如音频、视频
- 所有音频:audio/*
- 所有视频:video/*
- 所有图片:image/*