javascript / expert
Snippet
Custom Array Subclassing for Domain-Specific State Updates
By extending the native Array class in JavaScript, domain-specific collection methods can be defined directly on state objects. Utilizing Symbol.species ensures native Array transformation methods return standard Array instances when immutability is required during React state setters.
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
Breakdown
1
class TaskCollection extends Array {
Extends the built-in JavaScript Array class using object-oriented prototype inheritance.
2
static get [Symbol.species]() { return Array; }
Overriding Symbol.species ensures derived array methods like map/filter return vanilla Arrays instead of TaskCollection instances.
3
setTasks(prev => new TaskCollection(...prev.markCompleted(id)));
Re-instantiates the custom TaskCollection with updated immutable array output to trigger React re-renders safely.