代码之家  ›  专栏  ›  技术社区  ›  Falieson

输入onChange w/React&TypeScript错误:jsx no lambda no bind

  •  3
  • Falieson  · 技术社区  · 7 年前

    你可以看到我的tsconfig的回购协议。json和tslint.json: https://github.com/Falieson/react15-meteor1.5 ,我正在使用 tslint-react 随附 jsx-no-lambda jsx-no-bind

    public renderTaskInput(): React.ReactElement<{}> {
        return (
          <div>
            <input
              onChange={this.handleNewTaskName.bind(this)}
            />
          </div>
        )
      }
    

     public renderTaskInput(): React.ReactElement<{}> {
        return (
          <div>
            <input
              onChange={(e: React.FormEvent<HTMLInputElement>) => this.handleNewTaskName(e)}
            />
          </div>
        )
      }
    

    我之前的提交是一个反例。你可以看到我的计数器组件对bind的调用不会导致

    return (
      <button onClick={this.handleChangeValue.bind(this, decrement)}>
        {decrement ? 'Decrease' : 'Increase'}
      </button>
    )
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   Falieson    7 年前

    在构造函数中绑定方法,或使用es7类语法。以下是解决方案:

      public handleNewTaskName = (e: React.FormEvent<HTMLInputElement>) => {
      console.log(e.currentTarget.value)
      this.setState({newTaskTitle: e.currentTarget.value})
     }
     public renderTaskInput(): React.ReactElement<{}> {
        return (
          <div>
            <input
              placeholder='New Task Name'
              name='app-tasks-inputTaskName'
              onChange={this.handleNewTaskName}
            />
          </div>
        )