Saltar al contenido

¿Cómo eliminar un elemento ToDo onClick en React?

Esta es la respuesta más exacta que encomtrarás compartir, pero mírala pausadamente y analiza si se puede adaptar a tu trabajo.

Solución:

Para eliminar los elementos pendientes, primero pase una función del componente principal:


Enlace esta función en el constructor:

this.removeTodo = this.removeTodo.bind(this);

Defina esta función en el componente principal, eliminará ese elemento de state variable:

removeTodo(name)
    this.setState(
        todo: this.state.todo.filter(el => el !== name)
    )

Luego, dentro del componente secundario, llame a este método para eliminar todo:

export default class TodoList extends Component 
    removeItem(e) 
        this.props.removeTodo(item);
    
    render() 
        return(
            
    this.props.todos.map((todo) => return
  • this.removeItem(todo) key=todo> todo
  • )
);

Sugerencia:

no llames setState varias veces dentro de un function si desea establecer varios state valores luego escríbalo así:

this.setState(
    a: value1,
    b: value2,
    c: value3
)

Ejemplo de trabajo:

class Todos extends React.Component 
    constructor(props) 
        super(props);
        this.state =  todos: [], text: '' ;
        this.removeTodo = this.removeTodo.bind(this);
    

    addTodo(e) 
        e.preventDefault();
        this.setState( 
        	todos: [ this.state.text, ...this.state.todos ],
        	text: ''
        );
    

    removeTodo(name, i)
        let todos = this.state.todos.slice();
        todos.splice(i, 1);
        this.setState(
            todos
        );
    

    updateValue(e) 
        this.setState( text: e.target.value)
    

    render() 
        return(
            
this.addTodo(e)> this.updateValue(e) />
); class TodoList extends React.Component removeItem(item, i) this.props.removeTodo(item, i); render() return(
    this.props.todos.map((todo,i) => return
  • this.removeItem(todo, i) key=i> todo
  • )
); ReactDOM.render(, document.getElementById('app'))



Actualizar:

Esto es para la duda de @whs.bsmith, el código que sugerí funcionará correctamente en el caso de que el usuario agregue los elementos únicos en la lista de tareas pendientes, si intenta agregar el mismo elemento, no se reflejará en la interfaz de usuario porque OP es utilizando el nombre de elementos de tareas pendientes como el key y key debería ser único.

Para resolver ese problema:

En el fragmento de trabajo, utilicé índices en lugar del nombre de los elementos de tareas pendientes para keyeso funcionará correctamente y le permitirá al usuario agregar el mismo elemento varias veces y, al eliminarlo, eliminará solo ese elemento específico, no todos los elementos que tienen el mismo nombre, pero no es una buena idea usar índices como el key.

has llamado establecerestado dos veces en el añadirTodo función. Puedes configurar todos y texto en una sola función setState como esta:

addTodo(e) 
    e.preventDefault();
    this.setState( todos: [ this.state.text, ...this.state.todos ], text: '' );

No escriba remover el artículo función en Lista de quehaceres Componente ya que está trabajando puramente en accesorios. pasar un remover el artículo función de Todos y elimine ese elemento en la función removeItem de Todos de esta manera:

import React, Component from 'react'
export default class Todos extends Component 
  constructor(props) 
    super(props);
    this.state =  todos: [], text: '' ;
    this.removeItem = this.removeItem.bind(this)
  

  addTodo(e) 
    e.preventDefault();
    this.setState( todos: [ this.state.text, ...this.state.todos ], text: '' );
  


  updateValue(e) 
    this.setState( text: [e.target.value])
  
  removeItem(index) 
    const todos = this.state.todos.filter((todo, todoIndex) => 
      return todoIndex !== index
    )
    this.setState( todos )
  
  render() 
    return(
      
this.addTodo(e)> this.updateValue(e) />
); class TodoList extends Component render() return(
    this.props.todos.map((todo, index) => return
  • this.props.removeItem(index) key=todo> todo
  • )
);

Espero eso ayude.

Te invitamos a añadir valor a nuestra información añadiendo tu experiencia en las notas.

¡Haz clic para puntuar esta entrada!
(Votos: 2 Promedio: 5)


Tags : /

Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *