因为不看前端文档,导致白忙活一整天

开发 前端
ant-design 官方提供了一个组件,可以用来为全局的组件进行统一配置,这个组件可以传入一个 input 的参数,即可配置全局的 Input 标签。

情况是这样子的,上周,我们接到了一项任务,需要把项目中输入框的那个自动拼写检查功能去掉,也就是如下图所示的红线部分,这个检查功能是浏览器默认具备的。

图片图片

解决办法

其实是有解决方法的,而且也不难,很简单,只需要在输入框标签上加上一个属性 spellcheck=false 即可,也就是:

图片图片

图片图片

解决思路

然而,难题来了,我得给项目里所有的输入框标签都添加这个属性才行。鉴于本项目采用了antd-design组件库,那么我们来梳理一下整个项目包含输入框标签的组件有哪些呢?

  • Input: 涵盖 input
  • Select: 涵盖 input
  • InputNumber: 涵盖 input
  • Textarea: 涵盖 textarea
  • body: 直接在 body 上添加 spellcheck="true"

多种解决方法

1.ConfigProvider

图片图片

ant-design 官方提供了一个组件,可以用来为全局的组件进行统一配置,这个组件可以传入一个 input 的参数,即可配置全局的 Input 标签

图片图片

也就是:

图片图片

由于这个配置只针对全局的Input,所以结果都有哪些组件成功去掉了拼写校验功能呢:

  • 1、Input:✅
  • 2、Select:❌
  • 3、InputNumber:❌
  • 4、Textarea:❌

2.修改defaultProps

大致的构思便是,对ant-design的源码里input相关的部分进行调整,给Input、Textarea等组件设定一个defaultProps,这个defaultProps如下所示:

图片图片

所以具体实现为以下代码:

图片图片

最终的结果便是,全局的Input、Textarea成功去除了拼写检查功能,然而Select、InputNumber却未能实现,这是因为它们依赖于RCSelect、RCInputNumber这两个其他的组件,所以要修改这两个组件,就得去改动它们所依赖的组件,如此一来结果就是:

  • Input:✅
  • Select:❌
  • InputNumber:❌
  • Textarea:✅

3.拦截React.createElement

我们都知道在 React 中,只要涉及到 JSX 语法,最终在解析时都会通过 React.createElement 方法来创建标签。

图片图片

所以思路就是在最终调用 React.createElement时,判断如果是 input、textarea 这两个类型的话,就给标签加上 spellCheck: false 这个属性,具体代码为:

图片图片

这样做的结果是:

  • Input:✅
  • Select:✅
  • InputNumber:✅
  • Textarea:✅

但是总是觉得直接涉及到React自带方法的修改,有点不太好。

4.全局监听input事件

主要的想法是全局监听 input 事件,然后在此事件中为触发该事件的 DOM 节点添加spellCheck: false属性,具体的代码是:

图片图片

这样做的结果是:

  • Input:✅
  • Select:✅
  • InputNumber:✅
  • Textarea:✅

5.MutationObserver

兼容性比较差,所以不考虑了吧~~~

图片图片

最终看文档:body 直接加 spellcheck="true"

唉。。。都怪自己之前没仔细阅读文档。。。实际上之前所做的全都是徒劳,最为简便的方法是直接在 body 上添加 spellcheck="false" 即可,这样其下方的后代元素会自动沿用这个属性值。。。

图片图片

图片图片


责任编辑:武晓燕 来源: 前端之神
相关推荐

2018-10-31 10:31:04

谷歌AI玩法

2021-11-13 00:07:40

微信功能技巧

2021-07-09 10:02:32

AI Rap人工智能

2019-07-19 06:41:19

数据驱动数据分析数据决策

2009-09-14 08:23:21

Windows 7升级时间

2009-12-04 13:20:03

VS2005安装

2015-01-22 17:38:53

京东移动技术峰会

2023-05-10 10:35:14

服务器代码

2009-11-30 15:21:38

Visual Stud

2020-06-21 13:31:26

终端命令开发

2020-07-29 09:06:41

Shell终端工具

2020-03-25 11:27:56

薪资标准互联网

2009-12-23 13:33:23

Fedora 8设备驱

2018-06-20 09:35:43

码农科技开发

2010-03-30 13:37:14

Nginx负载均衡

2009-12-01 16:32:20

VS2003安装步骤

2020-06-22 11:47:05

漏洞数据泄露网络安全

2024-08-23 09:46:46

2021-06-29 07:04:38

爬虫代码Python
点赞
收藏

51CTO技术栈公众号