为什么析构函数可以与事件一起使用,而没有事件却无法工作

时间:2018-11-05 20:55:18

标签: reactjs events destructuring

当我使用此代码时:

 onChange = e => {
  const { name, value } = e.target;
     this.setState(currentState => ({
      tempInput: { ...currentState.tempInput, [name]: value }
    }));
  };

一切正常,但是当我这样做时:

 onChange = e => {
     this.setState(currentState => ({
      tempInput: { ...currentState.tempInput, [e.target.name]: e.target.value }
    }));
  };

我收到一个错误:TypeError:e.target为空, 有什么区别?我错过了什么吗?

1 个答案:

答案 0 :(得分:4)

因为this.setState()asynchronous。因此e在执行时变得不确定。

为缓解这种情况,您可以在e函数参数中破坏onChange,从而将namevalue定义在onChange函数范围内:

 onChange = ({ target: { value, name } }) => {
     this.setState(currentState => ({
      tempInput: { ...currentState.tempInput, [name]: value }
    }));
  };

或者...您可以在执行e.target之前销毁this.setState(),这也将namevalue定义在onChange功能范围内:< / p>

 onChange = e => {
     const { name, value } = e.target;
     this.setState(currentState => ({
      tempInput: { ...currentState.tempInput, [name]: value }
    }));
  };