想请问下老师,为什么用函数式更新state,无法直接获取到事件对象参数e,而需要将e.target.value赋值给局部变量呢

来源:3-6 TodoList 代码优化

rubysakura

2019-02-21

即在Todolist组件中,监听input输入的方法:

handleChange(e) {
    // 此处存在一个疑问,为什么不可以直接使用e
    const value = e.target.value; 
    this.setState((prevState) => ({
      inputValue: value
    }));
  }

为什么不可以直接使用参数e呢,在我的理解里,参数e和方法内部的局部变量是等价的,这步赋值操作不太理解,希望得到老师的解答,非常感谢。

PS: 刚才测试了一下,只有e作为特殊存在是这样,比如在Todolist组件中代码如下

constructor(props) {
   ...
   this.handleDelete = this.handleDelete.bind(this, 1);
 }
 handleChange(num, e) {
  this.setState((prevState) => ({
    inputValue: num
  }));
}

在input输入任何字符均显示1,符合逻辑,所以推断参数e无法正常使用是react的特殊处理?

写回答

2回答

Dell

2019-02-21

是的,这是react基于性能考虑的一个特殊处理

0
1
rubysakura
收到,谢谢老师
2019-02-21
共1条回复

Watson丶

2019-09-12

1
0

React零基础入门到实战,完成企业级项目简书网站开发

主流新技术 React-redux,React-router4,贯穿基础语法

5275 学习 · 2496 问题

查看课程