Что я должен сделать, чтобы удалить элемент из моего списка дел? Что я сделал не так?
Вот мой код
function App1() {
const myInputValue = useRef();
const [todo, setToDo] = useState([]);
const addItem = (event) => {
event.preventDefault();
const id = uuid();
setToDo([
...todo,
{
id: id,
name: myInputValue.current.value,
},
]);
myInputValue.current.value = "";
};
const removeItem = e => {
const data = todo.filter(el => el.e !== e);
setToDo(data);
};
const listItems = todo.map((element) => (
<li key = {element.id}>
{element.name}
<button>Done</button>
<button onClick = {() => removeItem(element.id)}>Delete</button>
</li>
));
return (
<div>
<input ref = {myInputValue}></input>
<button onClick = {addItem}>Add</button>
<ul>
{listItems}
</ul>
</div>
);
}
export default App1;
Что мне следует изменить в моей функции removeItem? Где я делаю ошибку? Пожалуйста помоги
Я не уверен в этом, но когда вы добавляете элемент, вы добавляете объект со следующими ключами (идентификатор и имя), так почему, когда вы вызываете removeItem, вы тестируете с помощью elemnt.e; ты не это хотел написать? :
todo.filter(el => el.id !== e)
вместо этого:
todo.filter(el => el.e !== e)
Нет проблем, братан, когда ты устал, отдохни. У меня случилось так, что я застрял с точкой с запятой, забытой в PHP-коде, потому что я был в полусне x)
Попробуй это
const removeItem = e => { //e is your id so you compare with other obj ids
const data = todo.filter(el => el.id !== e);
setToDo(data);
};
Да, я уже это понял, большое спасибо
Вы передаете имя элемента вместо самого элемента.
<button onClick = {() => removeItem(element.name)}>Delete</button>
Может быть, было бы лучше, если бы вы сравнили идентификатор задачи в своей функции фильтра. Попробуйте изменить функцию removeItem, чтобы она была такой.
const removeItem = e => {
const data = todo.filter(el => el.id !== e.id);
setToDo(data);
};
омг .... я такой глупый .... большое спасибо, братан. Может быть, это потому, что я так хочу спать....