Yeni vəziyyət yarat
React state-ni yerində dəyişmək əvəzinə yeni massiv və dəyişən obyekt üçün yeni obyekt yarat. Spread əlavə etmək, filter silmək, map konkret elementi yeniləmək üçündür. Əvvəlki state-dən asılı əməliyyatda funksional setter istifadə et.
import { useState } from 'react';
export default function Tasks() {
const [tasks, setTasks] = useState([]);
function add() {
const task = { id: crypto.randomUUID(), title: 'Yeni tapşırıq', done: false };
setTasks(previous => [...previous, task]);
}
function toggle(id) {
setTasks(previous => previous.map(task =>
task.id === id ? { ...task, done: !task.done } : task
));
}
return <section>
<button type="button" onClick={add}>Əlavə et</button>
<ul>{tasks.map(task => <li key={task.id}>
<label><input type="checkbox" checked={task.done}
onChange={() => toggle(task.id)} /> {task.title}</label>
<button type="button" onClick={() =>
setTasks(previous => previous.filter(item => item.id !== task.id))
}>Sil: {task.title}</button>
</li>)}</ul>
</section>;
}
Səthi surətin sərhədi
[...tasks] yeni xarici massiv yaradır, içindəki obyektləri dərin köçürmür. Sonra copy[0].done = true etsən köhnə state-dəki obyekt də dəyişər. Dəyişən yolu yeni obyektlərlə qur. sort yerində dəyişdiyindən state-ni sıralamazdan əvvəl surət çıxar. Nəticəni ID ilə dəyiş ki, eyni mətnli tapşırıqlar səhvən birgə silinməsin.