Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Reactjs 使用react js删除列表中的特定项_Reactjs - Fatal编程技术网

Reactjs 使用react js删除列表中的特定项

Reactjs 使用react js删除列表中的特定项,reactjs,Reactjs,因此,我试图从当前数组中删除todo项,但该项不起作用。当服务器启动时,我尝试了console.log,但没有传递任何参数 Todos返回一个数组[] 这是我的密码: handleTodoDelete = (deleteTodo) => { const remainingItems = this.state.todo.filter (todo => { return todo !== deleteTodo; }); this.setState

因此,我试图从当前数组中删除todo项,但该项不起作用。当服务器启动时,我尝试了console.log,但没有传递任何参数

Todos返回一个数组[]

这是我的密码:

handleTodoDelete = (deleteTodo) => {
    const remainingItems = this.state.todo.filter (todo => {  
      return todo !== deleteTodo;
    });

    this.setState({
      todos: remainingItems
    });

  }
我的返回码有以下内容:

 return (
          <li
            className={completeClass}
            onClick={() => this.handleTodoClick(todo)}>
            {todo.description}

          <button onClick= 
{(todo)=>this.handleTodoDelete(todo)}>delete</button>

</li>
返回(
  • this.handleTodoClick(todo)}> {todo.description} this.handleTodoDelete(todo)}>delete
  • 尝试执行以下操作:

    const remainingItems = this.state.todos.filter (todo => {  
      return todo !== deleteTodo;
    });
    
    this.setState({
      todos: remainingItems
    });
    
    或者尝试做:

    const remainingItems = this.state.todo.filter (todo => {  
      return todo !== deleteTodo;
    });
    
    this.setState({
      todo: remainingItems
    });
    
    似乎您希望在状态中使用
    todo
    todo
    ,而不是两者都使用

    下面是一些带有过滤器的工作代码,可能会帮助您比较参考:

    const-app=document.querySelector(“#app”);
    const todoOne={id:1,description:“给这个编码。”};
    const-todoTwo={id:2,description:“制造它。”};
    常数todos=[
    今天,
    托多沃,
    ];
    const todoToRemove=todoOne;
    const removedTodos=todos.filter(
    (todo)=>todo.id!=todoToRemove.id
    )
    app.innerHTML=`
    待办事项(原件):
    ${JSON.stringify(待办事项)}

    待办事项(已删除):
    ${JSON.stringify(removedTodos)}

    `;
    
    一小条
    
    在react redux应用程序中更改列表或对象时,应始终创建另一个列表或对象

    最好的方法是通过spread操作符

    handleTodoDelete = (deleteTodo) => {
        let state = this.state;
        let newTodo = [...state.todo.filter(todo => todo.id !== deleteTodo.id)];
        state.todo = newTodo;
        this.setState({ state });
    }
    

    似乎您正在将过滤设置为
    todo
    数组的状态,但您正在设置
    todos
    。您是否应该只是在处理
    todo
    todos
    ?当im通过…(完成!=isdone-{this.state.todos.map(todo=>{let completeClass=“”;if(todo.isdone)时,它会起作用{completeClass=“complete”}返回(
  • this.handleTodoClick(todo)}>{todo.description}如果
    this.state.todos.map
    正在工作,可以尝试
    this.state.todos.filter
    。您有
    this.state.todo.filter
    它是单数而不是复数。这有意义吗?当我将其更改为“this.state.todos.filter”时,它仍然不会删除您可能希望您的状态匹配,但这可能是另一个问题。
    todo!==deleteTodo
    正在比较对象而不是值。您可以改为比较和id吗?
    todo.id!==deleteTodo.id
    谢谢您的回答。您介意在代码中添加一些澄清或解释性文本吗?