javascript / expert
Snippet
Benutzerdefiniertes Unterklassen-Array für domänenspezifische Zustandsaktualisierungen
Durch das Erweitern der nativen Array-Klasse in JavaScript können domänenspezifische Sammlungs-Methoden direkt auf Zustandsobjekten definiert werden. Die Verwendung von Symbol.species stellt sicher, dass native Transformationsmethoden Standard-Array-Instanzen zurückgeben, wenn Unveränderlichkeit bei React-State-Settern erforderlich ist.
snippet.js
javascript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
import React, { useState } from 'react';class TaskCollection extends Array {static get [Symbol.species]() { return Array; }filterByPriority(minPriority) {return this.filter(task => task.priority >= minPriority);}markCompleted(id) {return this.map(task => task.id === id ? { ...task, done: true } : task);}}export function TaskListManager({ initialTasks }) {const [tasks, setTasks] = useState(() => new TaskCollection(...initialTasks));const handleComplete = (id) => {setTasks(prev => new TaskCollection(...prev.markCompleted(id)));};return (<div>{tasks.filterByPriority(2).map(task => (<button key={task.id} onClick={() => handleComplete(task.id)}>{task.title} ({task.done ? 'Done' : 'Pending'})</button>))}</div>);}
react
Erklärung
1
class TaskCollection extends Array {
Erweitert die integrierte JavaScript-Array-Klasse mittels objektorientierter Prototypen-Vererbung.
2
static get [Symbol.species]() { return Array; }
Das Überschreiben von Symbol.species stellt sicher, dass abgeleitete Array-Methoden wie map/filter gewöhnliche Arrays statt TaskCollection-Instanzen zurückgeben.
3
setTasks(prev => new TaskCollection(...prev.markCompleted(id)));
Instanziiert die benutzerdefinierte TaskCollection mit aktualisiertem, unveränderlichem Array-Ergebnis neu, um React-Re-Renderings sicher auszulösen.