Javascript 为什么可以';当使用onKeyPress时,不能更新状态

Javascript 为什么可以';当使用onKeyPress时,不能更新状态,javascript,html,css,reactjs,Javascript,Html,Css,Reactjs,请考虑以下代码,当我使用按键事件处理程序时,我无法更新inputVal import React,{Component,Fragment}来自'React'; 从“./List”导入列表; 导入“/listtoos.css”; 类Todos扩展组件{ 建造师(道具){ 超级(道具); this.state={ inputVal:null } this.refInput=null this.\u handleChange=this.\u handleChange.bind(this) } _手柄

请考虑以下代码,当我使用按键事件处理程序时,我无法更新
inputVal

import React,{Component,Fragment}来自'React';
从“./List”导入列表;
导入“/listtoos.css”;
类Todos扩展组件{
建造师(道具){
超级(道具);
this.state={
inputVal:null
}
this.refInput=null
this.\u handleChange=this.\u handleChange.bind(this)
}
_手柄更换(pEvt){
如果(pEvt.keyCode==“13”){
这是我的国家({
inputVal:this.refInput.value
})
console.log(this.state.refInput)
}
}
render(){
const{text}=this.props;
报税表(
{this.refInput=input}}onKeyDown={pEvt=>this.\u handleChange(pEvt)}className=“form\uu input”占位符={text}/>
)
}
}

导出默认TODO使用
pEvt.target.value
而不是
this.refInput.value

_handleChange(pEvt) {
  if (pEvt.keyCode === "13") {
    this.setState({
      inputVal: pEvt.target.value
    });
    console.log(this.state.inputVal);
  }
}

实际上,您在代码中使用的是KeyDown事件,而不是您断言的KeyPress。看起来你只是想得到输入元素的值,对吗

我将为onchange事件而不是输入创建一个处理程序。您只是试图获取输入的值。你甚至不需要你的裁判

_handleChange(e) {

        this.setState({
            inputVal: e.target.value
        });            

}
constructor() {
    // wire up your event handler
    this._handleChange = this._handleChange.bind(this);
}
...
<input onChange={this._handleChange} className="form__input" placeholder={ text } />
\u手柄更换(e){
这是我的国家({
输入值:e.target.value
});            
}
构造函数(){
//连接事件处理程序
this.\u handleChange=this.\u handleChange.bind(this);
}
...

我真的不喜欢在onKeyDown上使用。相反,你可以使用onChange,我认为它更好

所以基本上你也需要这样做

类Todos扩展组件{
建造师(道具){
超级(道具);
this.state={
inputVal:null
}
this.\u handleChange=this.\u handleChange.bind(this)
}
_手变(e){
如果(例如,keyCode==“13”){
这是我的国家({
输入值:e.target.value
})
console.log(例如target.value)
}
}
render(){
const{text}=this.props;
报税表(
这个.\u handleChange(e)}className=“form\u input”占位符={text}/>
)
}
}

导出默认TODO输入/返回键将触发事件,且
pEvt.key
等于“输入”,而不是“13”。注意:我看不出
这个
有问题。我编辑了这篇文章,他没有解决我的问题,值总是不更新,总是在
null
fyi-keyCode不推荐使用,改用key。此外,您还使用了箭头函数和绑定,说明您需要了解它们实际在做什么(使用一个或另一个)。另外,您使用的是refInput,而不是简单的pEvt.target.value-不需要ref。你也把它叫做pEvt,可能是暗示你从其他语言中继承了这个指针概念(所有对象都通过引用传递),在这里发布之前,我使用
pEvt.key==“enter”
,但我忘记了大写
e
,所以它解决了我的问题,非常感谢