看demo
https://jsfiddle.net/liyatang/bq6oss6z/1/
如果输入字母和数字是ok的,但是输入中文的‘我们’就出现了一大串东西,请问怎么回事?
这个问题被解了吗??我也遇到同样问题
試試: https://jsfiddle.net/eyesofki...
也遇到了一样的问题,在显示拼音的地方适用中文输入法。但是是用setTimeout解决的。。。
import React from 'react';
import { render } from 'react-dom';
const Text = React.createClass({
getInitialState: function() {
this.timer = 0;
return {
value: ''
}
},
handleChange: function(e) {
this.timer = setTimeout(() => {
clearTimeout(this.timer);
console.log(this.inp.value)
this.inp.value = this.inp.value;
}, 100);
},
render: function() {
var self = this;
return (
<div>
<input defaultValue='' ref={function(node) {self.inp = node}} onChange={this.handleChange} />
</div>
);
}
});
render(
<Text />,
document.getElementById('app')
);
完美解决方案只有等facebook。这里提供一个workaround
为什么要setTimeout呢? 去掉setTimeout就好了啊。
正常来说,Controlled Components 必须在onChange事件返回之前修改好value属性,这样对输入法来说才能获得一个连贯的过程。否则的话,会变成这样的步骤:
1、输入法部分输入,产生新的输入文字
2、触发onChange,带上新的文字w
3、onChange返回后,value没有变更,因此React认为需要锁定内容,删掉新的文字w
4、根据输入法的实现,部分输入法的空间里里仍然带有文字w,而文本框里的w已经被删除
5、setTimeout被触发,value被改变,添加新的w到文本框。这个w与输入法的无关,因此直接出现了英文w
正常的步骤是:
1、输入法部分输入,产生新的输入文字w
2、触发onChange,带上新的文字w
3、onChange返回时,value里已经有新的文字w,因此二者可以保持一致