Зачеркните элемент списка в списке задач react

#node.js #reactjs

Вопрос:

Я пытаюсь создать приложение для списка дел с отметкой времени и вычеркнуть элемент списка при нажатии кнопки «Удалить», но когда я нажимаю кнопку «Удалить», все элементы пропускаются. Я искал везде, но не могу заставить его работать для моего кода. Я могу извлечь уникальный идентификатор с помощью функции кнопки удаления, но я не могу понять, как использовать этот идентификатор, чтобы удалить только этот идентификатор.

 import "../App.css"; import moment from "moment";  const List = () =gt; {  const [strike, setStrike] = useState(false);  const [addtime, setaddTime] = useState(moment().utcOffset(" 05:30").format("YYYY-MM-DD HH:mm:ss ").toString());  const [store, setStore] = useState([]);  const [endTime, setendTime] = useState();  const [inputData, setInputData] = useState('');  const [items, setItems] = useState([]);   //to add an item   const addItem = () =gt; {  if (!inputData) {  } else {  const allInputData = {id: new Date().getTime().toString(), name:inputData}  setItems([...items, allInputData]);  setInputData("");  setaddTime(  moment().utcOffset(" 05:30").format("YYYY-MM-DD HH:mm:ss ").toString()  );  setStore([...store, addtime]);  }  };   // to delete an item   const deleteItem = (index) =gt; {  const boolstrike = items.filter((elem) =gt; {  return index == elem.id;     })    console.log(boolstrike);    setStrike(!!boolstrike);    };  //to remove time  const deleteTime = () =gt; {  setendTime (moment().utcOffset(" 05:30").format("YYYY-MM-DD HH:mm:ss ").toString());   }     // to remove all items   const removeAll = () =gt; {  setItems([]);  setStore([]);  };   return (  lt;gt;  lt;div className="parent-div"gt;  lt;div className="child-div"gt;  lt;h3gt;TO DO LISTlt;/h3gt;  lt;div className="addItems"gt;  lt;input  type="text"  placeholder="what needs to be done?"  value={inputData}  onChange={(e) =gt; setInputData(e.target.value)}  /gt;  lt;button  type="button"  onClick={addItem}  className="btn btn-secondary"  gt;  Create  lt;/buttongt;  lt;/divgt;  lt;div id="wrapper"gt;  lt;div id="left" className="showItems"gt;  {items.map((elem) =gt; {  return (  lt;div className="eachItem" key={elem.id}gt;  lt;h3  style={{  textDecoration: strike ? "line-through" : "none",  }}  gt;  {elem.name}  lt;/h3gt;  lt;button  type="button"  onClick={() =gt; deleteItem(elem.id)}  className="btn btn-danger btn-sm"  gt;  Delete  lt;/buttongt;    lt;/divgt;  );  })}  lt;/divgt;  lt;div id="right"gt;  {store.map((elim, ind) =gt; {  return (  lt;div className="eachdate" key={ind}gt;  lt;h6gt;{"Task Created at:"   elim} lt;/h6gt;  lt;button  type="button"  onClick={() =gt; deleteTime()}  className="btn btn-danger btn-sm"  gt;  Delete  lt;/buttongt;    lt;/divgt;  );  })}  lt;/divgt;  lt;/divgt;  lt;div className="showItems"gt;  lt;button onClick={removeAll} className="btn btn-danger"gt;  Delete All  lt;/buttongt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/gt;  ); };  export default List;```      

Ответ №1:

Вы можете попробовать добавить страйк в список предметов и отследить это. таким образом, если нажать кнопку удалить btn, вы можете пометить этот элемент как вычеркнутый.

Вы можете установить strike время удаления

 const deleteItem = (index) =gt; {  const updatedItems = items.filter((elem) =gt; {  if (index == elem.id) {  elem.strike = true;  }  return elem;  });   setItems(updatedItems);  };  

и на основе этого класса свойств будет применен, будут вычеркнуты только удаленные элементы.

обновленный код:

 import React, { useState } from 'react'; import './App.css'; import moment from 'moment';  const List = () =gt; {  const [strike, setStrike] = useState(false);  const [addtime, setaddTime] = useState(  moment().utcOffset(' 05:30').format('YYYY-MM-DD HH:mm:ss ').toString()  );  const [store, setStore] = useState([]);  const [endTime, setendTime] = useState();  const [inputData, setInputData] = useState('');  const [items, setItems] = useState([]);   //to add an item   const addItem = () =gt; {  if (!inputData) {  } else {  const allInputData = {  id: new Date().getTime().toString(),  name: inputData,  };  setItems([...items, allInputData]);  setInputData('');  setaddTime(  moment().utcOffset(' 05:30').format('YYYY-MM-DD HH:mm:ss ').toString()  );  setStore([...store, addtime]);  }  };   // to delete an item   const deleteItem = (index) =gt; {  const updatedItems = items.filter((elem) =gt; {  if (index == elem.id) {  elem.strike = true;  }  return elem;  });   setItems(updatedItems);  };  //to remove time  const deleteTime = () =gt; {  setendTime(  moment().utcOffset(' 05:30').format('YYYY-MM-DD HH:mm:ss ').toString()  );  };   // to remove all items   const removeAll = () =gt; {  setItems([]);  setStore([]);  };   return (  lt;gt;  lt;div className="parent-div"gt;  lt;div className="child-div"gt;  lt;h3gt;TO DO LISTlt;/h3gt;  lt;div className="addItems"gt;  lt;input  type="text"  placeholder="what needs to be done?"  value={inputData}  onChange={(e) =gt; setInputData(e.target.value)}  /gt;  lt;button  type="button"  onClick={addItem}  className="btn btn-secondary"  gt;  Create  lt;/buttongt;  lt;/divgt;  lt;div id="wrapper"gt;  lt;div id="left" className="showItems"gt;  {items.map((elem) =gt; {  console.log(elem);  return (  lt;div className="eachItem" key={elem.id}gt;  lt;h3  style={{  textDecoration: elem.strike ? 'line-through' : 'none',  }}  gt;  {elem.name}  lt;/h3gt;  lt;button  type="button"  onClick={() =gt; deleteItem(elem.id)}  className="btn btn-danger btn-sm"  gt;  Delete  lt;/buttongt;  lt;/divgt;  );  })}  lt;/divgt;  lt;div id="right"gt;  {store.map((elim, ind) =gt; {  return (  lt;div className="eachdate" key={ind}gt;  lt;h6gt;{'Task Created at:'   elim} lt;/h6gt;  lt;button  type="button"  onClick={() =gt; deleteTime()}  className="btn btn-danger btn-sm"  gt;  Delete  lt;/buttongt;  lt;/divgt;  );  })}  lt;/divgt;  lt;/divgt;  lt;div className="showItems"gt;  lt;button onClick={removeAll} className="btn btn-danger"gt;  Delete All  lt;/buttongt;  lt;/divgt;  lt;/divgt;  lt;/divgt;  lt;/gt;  ); };  export default List;