javascript / intermediate
Snippet
Verwaltung dynamischer Raster-Eingaben mit gecurryten Event-Handler-Funktionen
Das Currying von Event-Handler-Funktionen ermöglicht es, dynamische Rasterkoordinaten (Zeilen- und Spaltenindizes) im Scope eines Closures vorzubinden und einen regulären Event-Handler zurückzugeben. Verschachtelte Array.map-Aufrufe sorgen für unveränderliche State-Updates der 2D-Matrix.
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
32
33
34
import React, { useState } from 'react';export function MatrixEditor({ rows, cols }) {const [grid, setGrid] = useState(() =>Array.from({ length: rows }, () => Array(cols).fill('')));const handleCellChange = (rowIndex, colIndex) => (event) => {const nextValue = event.target.value;setGrid((prevGrid) =>prevGrid.map((row, r) =>r === rowIndex? row.map((cell, c) => (c === colIndex ? nextValue : cell)): row));};return (<div className="matrix-grid">{grid.map((row, r) => (<div key={r} className="matrix-row">{row.map((val, c) => (<inputkey={`${r}-${c}`}value={val}onChange={handleCellChange(r, c)}/>))}</div>))}</div>);}
react
Erklärung
1
const handleCellChange = (rowIndex, colIndex) => (event) => {
Erstellt eine gecurryte Funktion höherer Ordnung, die die Zielkoordinaten im Closure-Scope festhält.
2
prevGrid.map((row, r) => r === rowIndex ? row.map(...) : row)
Führt ein unveränderliches Update im mehrdimensionalen Array durch, indem nur der betroffene Index neu erstellt wird.
3
onChange={handleCellChange(r, c)}
Ruft die äußere gecurryte Funktion beim Rendern auf und übergibt den exakten Zeilen- und Spalten-Listener.