Better

Ethan的博客,欢迎访问交流

不够成文的小内容

一些小的知识点,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/*


留言