【React】compositionend事件不触发
实现input输入框输入中文时不改变value值的效果,但是输入中文结束时compositionend不会触发;
已经google搜索了相关问题;
浏览器:Chrome 73.0.3683.86 (64-bit);
输入法:win10系统输入法
import React from "react";import ReactDOM from "react-dom";
class InputBox extends React.Component {
constructor(props) {
super(props);
this.inputRef = React.createRef();
this.state = {
isOnComposition: false,
value: ""
};
}
handleComposition = e => {
console.log(e.type);
if (e.type === "compositionend") {
console.log(e.target.value);
this.setState({ isOnComposition: false }, () => {
this.handleFixedChange(e.target.value);
});
} else {
this.setState({ isOnComposition: true });
}
};
handleFixedChange = v => {
if (!this.state.isOnComposition) {
this.setState({
value: v
});
}
};
render() {
return (
<input
value={this.state.value}
onCompositionStart={this.handleComposition}
onCompositionUpdate={this.handleComposition}
onCompositionEnd={this.handleComposition}
onChange={e => {
this.handleFixedChange(e.target.value);
}}
ref={this.inputRef}
/>
);
}
}
const rootElement = document.getElementById("root");
ReactDOM.render(<InputBox />, rootElement);
回答
ios也遇到这个问题,楼主解决了吗
compositionend 事件是在onChange触发后才会出现的,
需要修改 handleFixedChange 方法
handleFixedChange = v => { /*
if (!this.state.isOnComposition) {
this.setState({
value: v
});
}
*/
this.setState({
value: v
});
};
如果是用来验证输入内容长度的,可以考虑用onKeyUp验证,并截取指定的长度。
以上是 【React】compositionend事件不触发 的全部内容, 来源链接: utcz.com/a/75851.html