Reaktiva operationer på arrayer av objekt i React
Låt oss nu lära oss att göra reaktiva
operationer på arrayer av objekt. I detta
fall måste vi skicka till funktionen
id för arrayelementet som
vi ska göra något med:
function App() {
const [notes, setNotes] = useState(initNotes);
const result = notes.map(note => {
return <li key={note.id}>
<span>{note.prop1}</span>
<span>{note.prop2}</span>
<span>{note.prop3}</span>
<button onClick={() => doSmth(note.id)}>
btn
</button>
</li>;
});
return <div>
<ul>
{result}
</ul>
</div>;
}
För att göra något med ett element måste vi först hitta det genom att iterera igenom hela arrayen med en loop:
function App() {
...
function doSmth(id) {
setNotes(notes.map(note => {
if (note.id === id) {
// gör något med elementet
}
return note;
}));
}
}
Låt oss som exempel ändra texterna i det hittade objektet:
function App() {
...
function doSmth(id) {
setNotes(notes.map(note => {
if (note.id === id) {
note.prop1 += '!';
note.prop2 += '!';
note.prop3 += '!';
return note;
}
return note;
}));
}
}
Gör en knapp i slutet av varje li,
vid klick på vilken denna li kommer att
raderas från listan.
Det finns tre inmatningsfält. Gör en knapp i slutet av varje li,
vid klick på vilken
data från denna li:s objekt kommer att
placeras i motsvarande inmatningsfält.
Modifiera föregående uppgift så
att det bredvid inmatningsfälten finns en knapp,
vid klick på vilken data från inmatningsfälten
kommer att placeras i motsvarande li.