【问题标题】:can anyone tell me why i am unable to delete an item from the todo list?谁能告诉我为什么我无法从待办事项列表中删除一个项目?
【发布时间】:2018-10-17 12:48:03
【问题描述】:

我对反应待办事项列表有疑问。

提交后,列表项显示正常。

然后我应该能够通过单击该项目来删除它,但是没有任何反应。一旦我尝试添加另一个项目,页面就会刷新并且所有项目都会被删除?

控制台日志只显示

[对象对象]


应用程序

import React, { Component } from 'react';
import './App.css';
import TodoItem from './TodoItem';

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      items: []
    };
    this.addItems = this.addItems.bind(this);
    this.deleteItem = this.deleteItem.bind(this);
  }

  addItems(e) {
    if (this._inputElement !== '') {
      let newItem = {
        text: this._inputElement.value,
        key: Date.now()
      };
      this.setState(prevState => {
        return {
          items: prevState.items.concat(newItem)
        };
      });
    }
    this._inputElement.value = '';
    e.preventDefault();
  }

  deleteItem(key) {
    console.log('key is' + key);
    console.log('itesm as' + this.state.items);
    var filteredItems = this.state.items.filter(function(item) {
      return item.key !== key;
    });
    this.setState = {
      items: filteredItems
    };
  }

  render() {
    return (
      <div className="app">
        <h2> things to do</h2>
        <div className="form-inline">
          <div className="header">
            <form onSubmit={this.addItems}>
              <input
                ref={a => (this._inputElement = a)}
                placeholder="enter task"
              />
              <button type="submit">add</button>
            </form>
          </div>
        </div>
        <TodoItem entries={this.state.items} delete={this.deleteItem} />
      </div>
    );
  }
}
export default App;

待办事项

import React, { Component } from 'react';

//search bar
class TodoItem extends Component {
  constructor(props) {
    super(props);
    this.createTasks = this.createTasks.bind(this);
  }
  createTasks(item) {
    return (
      <li onClick={() => this.delete(item.key)} key={item.key}>
        {item.text}
      </li>
    );
  }
  delete(key) {
    console.log('key is ' + key);
    this.props.delete(key);
  }
  render() {
    let todoEntries = this.props.entries;
    let listItems = todoEntries.map(this.createTasks);
    return <ul className="theList">{listItems}</ul>;
  }
}

export default TodoItem;

【问题讨论】:

  • 嗯...我想你可能已经重复了几次

标签: javascript reactjs


【解决方案1】:

您正在分配给setState,而不是使用它作为它的方法

改变

this.setState = {
  items: filteredItems
};

this.setState({
  items: filteredItems
});

这也是它会重新加载应用程序的原因,因为您已经覆盖了setState 方法,您应该会收到一个错误,即setState 不是一个函数,它会使应用程序崩溃。

【讨论】:

    猜你喜欢
    • 2021-06-09
    • 2020-06-06
    • 2019-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-08
    • 1970-01-01
    相关资源
    最近更新 更多