我就想知道为啥跑不起来,在点击add的时候总是报错,错误信息如下,求解答

来源:2-3 实现列表项的删除功能

慕婉清2499770

2019-03-21 23:53

import React from 'react';


class TodoList extends React.Component {

  constructor(props){

    super(props);

    this.state = {

      list: [],

      inputValue: ''

    }

    this.handleBtnClick = this.handleBtnClick.bind(this);

    this.handleInput = this.handleInput.bind(this);

    this.handleItemClick = this.handleItemClick.bind(this);

  }

  handleInput(e){

    this.setState({

      inputValue: e.target.value

    })

  }

  handleBtnClick(){

    this.setState({

      list: [...this.state.list, this.state.inputValue],

      inputValue: ''

    })

  }

 

  handleItemClick(index){

    const list = [...this.state.list];

    list.splice(index, 1);

    this.setState({list});

  }


  render() {

    return (

      <div>

        <div>

          <input value={this.state.inputValue} onChange={this.handleInput}/>

          <button onClick={this.handleBtnClick}>add</button>

        </div>

        <ul>

          {

            this.state.list.map((item, index) => {

              return (

               <li key={index} onClick={this.handleItemClick(index)}>{item}</li>

              )

            })

          }

        </ul>

      </div>

    );

  }

}


export default TodoList;


报错信息:Warning: Cannot update during an existing state transition (such as within `render`). Render methods should be a pure function of props and state.


写回答 关注

1回答

  • 知晓同丶
    2019-03-22 15:56:04
    已采纳

    onClick={this.handleItemClick(index)} 改成 onClick={() => this.handleItemClick(index)}

    慕粉3251...

    使用map遍历数据列表的时候,光在构造函数绑定this(this.handleItemClick = this.handleItemClick.bind(this);)还不行,onClick={this.handleItemClick(index)} 除了改成 onClick={() => this.handleItemClick(index)},还可以改成onClick={this.handleItemClick.bind(this)}

    2019-03-27 17:06:12

    共 1 条回复 >

React16.4 快速上手

结合实例带你快速入门React16基础语法,并完成Todolist功能开发。

40002 学习 · 134 问题

查看课程

相似问题