Javascript 重音和延迟反应';s在更改输入时设置状态
我正在创建一个小实用程序,需要调用一个Javascript 重音和延迟反应';s在更改输入时设置状态,javascript,reactjs,deferred,Javascript,Reactjs,Deferred,我正在创建一个小实用程序,需要调用一个setState延迟到输入的onChange处理程序触发的下一个勾号。下面是显示基本概念的简单片段 类MyComponent扩展了React.Component{ 构造函数(){ 超级(…参数); this.state={}; } onChange(值){ 设置超时(v=>{ this.setState({name:v}); }.bind(这个,值),0); } 渲染(){ 返回( this.onChange(evt.target.value)}/> );
setState
延迟到输入的onChange
处理程序触发的下一个勾号。下面是显示基本概念的简单片段
类MyComponent扩展了React.Component{
构造函数(){
超级(…参数);
this.state={};
}
onChange(值){
设置超时(v=>{
this.setState({name:v});
}.bind(这个,值),0);
}
渲染(){
返回(
this.onChange(evt.target.value)}/>
);
}
};
ReactDOM.render(
,
document.getElementById(“应用程序容器”)
);
如果您在Mac OS上的浏览器中运行此代码段,并尝试键入带有重音的字母,则在每个浏览器上都会出现不同的尴尬行为。在Chrome浏览器上,在不再应用重音后,重音只在第一次起作用(请看下面的gif)。在Firefox上,重音和字母不会出现
你们有什么线索吗
p、 s:我在React 0.13、0.14和15.0.2上测试了这种行为。基本上你不应该推迟设置状态。React在这种情况下不能正常工作 看: 正在发生的事情: 假设您按下字母
A
onChange
时,React处理所有状态突变node.value=“”
设置状态
被触发,应用带有node.value=“A”
的字母A
因此,遗憾的是,没有解决方案。不确定您所面临的问题。但是您认为将
字符集设置为UTF-8或ISO-8859-1可以解决这个问题吗?@anoop JSFIDLE已经使用UTF-8运行了。我相信这不是一个字符集问题。我用gif更新了问题,显示了问题,以帮助大家理解。
class MyComponent extends React.Component {
constructor () {
super(...arguments);
this.state = {};
}
onChange (value) {
setTimeout(v => {
this.setState({ name: v });
}.bind(this, value), 0);
}
render () {
return (
<div>
<input
type="text"
value={this.state.name}
onChange={evt => this.onChange(evt.target.value)} />
</div>
);
}
};
ReactDOM.render(
<MyComponent/>,
document.getElementById("app-container")
);