最近本山人在项目的开发过程中遇到这么一个问题:

在列表中嵌入antd的Input输入框,切换到微软输入法输入时,就不能成功输入中文字符,然而搜狗输入法又是正常的。

研究一番,发现是input的value这王八蛋在搞事情,每次输入都会调用onChange事件。而搜狗输入法和微软的输入法对onChange调用机制不同,所以就会出现这种情况(至于有何不同,在这里就不做陈述了,麻烦各位自行问度娘)。

解决方法:对input框进行二次封装,对onChange调用机制进行处理。

话不多说,直接撸代码才是王道(这里封装的比较简单,因为本山人的项目对input框的需求不多,各位看官可自行完善)

import React, { Component, createRef } from 'react';
import PropTypes from 'prop-types';class ControlledInput extends Component {inputRef = createRef();isOnComposition = false;componentDidMount() {this.setInputValue();}componentDidUpdate() {this.setInputValue();}setInputValue = () => {this.inputRef.current.value = this.props.value || ''};handleComposition = evt => {if (evt.type === 'compositionend') {this.isOnComposition = false;// 谷歌浏览器:compositionstart onChange compositionend// 火狐浏览器:compositionstart compositionend onChangeif (navigator.userAgent.indexOf('Chrome') > -1) {this.onChange(evt);}return;}this.isOnComposition = true;};onChange = evt => {if (!this.isOnComposition) {this.props.onChange(evt);}};render() {const commonProps = {onChange: this.onChange,onCompositionStart: this.handleComposition,onCompositionUpdate: this.handleComposition,onCompositionEnd: this.handleComposition,};return <inputref={this.inputRef}type="text"style={{ width: '100%', border: '0.1px solid #e8e8e8', outlineColor:'#e8e8e8' }}{...commonProps}/>}
}ControlledInput.propTypes = {onChange: PropTypes.func
};ControlledInput.defaultProps = {onChange: () => { }
};export default ControlledInput;

各位看官,在下也不想装逼,实则有人已对此问题做过详细描述了,看在各位已经看过本山人文章的份上,就透露给大家吧,以表各位一览之恩:解决 React 中的 input 输入框在中文输入法下的 bug

解决 input 输入框在中文输入法下的 bug相关推荐

  1. 解决React中input输入框在中文输入法下的bug

    解决React 中input 输入框在中文输入法下的bug 需求:封装Input 组件,输入拼音过程中不触发onChange,拼音输入结束后触发onChange 原理:input 标签上面有两个事件, ...

  2. react根据中文获取拼音_解决 React 中的 input 输入框在中文输入法下的 bug

    以下会涉及到的技术点:react mobx compositionstart compositionupdate compositionend 问题描述 在使用 input 时,通常会对输入的内容做校 ...

  3. 解决oninput事件在中文输入法下会取得拼音的值的问题

    在做搜索等功能时,很多时候我们需要实时获取用户输入的值,而常常会得到类似 w'm 这样的拼音.为了解决这个问题,我在网上搜索了下相关问题,发现了两个陌生的事件:compositionstart 和 c ...

  4. ios 中文输入法 完成事件_compositionEnd 和 input 事件(中文输入法问题)

    网上用 compositionstart + compositionend + input 解决中文输入法问题的办法 node.addEventListener('compositionstart', ...

  5. vue中模糊搜索keyup在中文输入法下输入英文无效的解决方法

    keyup事件在中文输入法下输入英文,vue中对应的val属性值为空.控制台显示并没有获取到任何值,但是input中确实有字母.纳尼?说好的双向绑定呢? 要解决这个问题可以采用watch+keyup事 ...

  6. 如何解决input输入框只输入数字

    如何解决input输入框只输入数字 在做一些手机号.验证码登录的时候,一般都会对input框的输入进行限制,手机号只能是数字,以后有三种方式: onkeyup = "value=value. ...

  7. python导入包的输入法_python使用idle edit编辑器时,中文输入法下遇到r、p、t、y时产生热键冲突...

    python使用idle edit编辑器时,中文输入法下遇到r.p.t.y时产生热键冲突 229 2020-08-25 10:03 半年之后再来看当初写的文章,早已"情随事迁",就 ...

  8. wps linux 中文ibus,解决wps for linux 中文输入法光标不跟随的问题

    需要安装qt4-qtconfig和ibus-qt4,安装ibus-qt4之后才能在qt4-qtconfig"界面"选项卡默认输入法选项中看到ibus,选定它,然后设置XIM输入风格 ...

  9. 移动端,input输入框被手机输入法解决方案

    移动端,input输入框被手机输入法解决方案 参考文章: (1)移动端,input输入框被手机输入法解决方案 (2)https://www.cnblogs.com/liuhappy/p/8809149 ...

最新文章

  1. android opencv 书籍,opencv android
  2. kubernetes英语怎么读_英语音标怎么读
  3. [分享]Host文件的原理解释及应用说明
  4. 声网纳斯达克上市、TikTok推出TikTok For Business、亚马逊推出无代码应用| Decode the Week...
  5. 取值方法_函数的定义域和参数的取值范围详解
  6. Ajax的工具类AjaxUtils,使用struts返回Json类型
  7. C++ pthread库
  8. golang切片的交差集
  9. Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染
  10. 赵旭计算机论文,上海交通大学赵旭教授团队在计算机视觉顶级期刊上发表最新研究成果...
  11. NPDP知识推送-第一章新产品开发战略(1)
  12. 网易2018校园招聘编程题真题集合1魔法币
  13. 商用厨房设备公司利邦国际申请纳斯达克IPO上市,募资2500万美元
  14. ubuntu trash
  15. 从几何角度全新理解线性代数
  16. axios和ajax的区别是什么
  17. 利用Gis绘制 直方图和趋势分析图
  18. python代码测试健康指数计算器_[代码全屏查看]-BMI指数计算器
  19. 实战分享1:如何使用华为VR Glass 6dof 基于 OpenXR@ unity 开发VR游戏/应用
  20. 把多张 PNG 图片拼在一起合成一张 RAW 格式的图片(附代码)

热门文章

  1. 东山再起的男人一般都有这七个表现
  2. CSS入门教程——HTML选择器
  3. 学习Python单利模式
  4. 产品经理必须会的软件——office
  5. 支持GB28281协议的远程抓拍4G低功耗摄像头解决方案
  6. NOIP 2018 提高组初赛试题 题目+答案+简要解析
  7. 从浏览器沦为系统毒瘤:无法禁用的IE背后,是几百亿的家族生意。。。
  8. Google(谷歌)走了我们该用什么呢?
  9. 关于Oracle数据库如何查询非当前用户名命名空间下的表不需要写ower直接from 表名
  10. Revit二次开发 获取模型截面线、截面轮廓