javascript / intermediate
Snippet
Verwalten unveränderlicher Tabellenausschnitte mittels toSpliced und shallowRef
Die Kombination von ECMAScripts nicht-mutierender Methode `Array.prototype.toSpliced` mit Vues `shallowRef` ermöglicht effiziente, unveränderliche Aktualisierungen großer tabellarischer Daten. Da `shallowRef` nur Neuzuweisungen von `.value` überwacht anstatt alle Array-Elemente tiefenreaktiv zu wrappen, verringert das Ersetzen der Array-Referenz via `toSpliced` den Reaktivitäts-Overhead und garantiert eine saubere Änderungserkennung.
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
import { shallowRef } from 'vue';export function useOptimisticTable(initialRows = []) {const rows = shallowRef(initialRows);const updateRowById = (id, updatedFields) => {const targetIndex = rows.value.findIndex(item => item.id === id);if (targetIndex === -1) return;const updatedItem = { ...rows.value[targetIndex], ...updatedFields };// toSpliced creates a new array without mutating the existing bufferrows.value = rows.value.toSpliced(targetIndex, 1, updatedItem);};const removeRowById = (id) => {const targetIndex = rows.value.findIndex(item => item.id === id);if (targetIndex === -1) return;rows.value = rows.value.toSpliced(targetIndex, 1);};return { rows, updateRowById, removeRowById };}
vue
Erklärung
1
const rows = shallowRef(initialRows);
Erstellt eine flache reaktive Referenz, die Updates nur bei Neuzuweisung des Root-Wertes auslöst.
2
const targetIndex = rows.value.findIndex(item => item.id === id);
Ermittelt den Index der Zielzeile im Array anhand ihrer eindeutigen ID.
3
rows.value = rows.value.toSpliced(targetIndex, 1, updatedItem);
Gibt eine neue Kopie des Arrays mit dem aktualisierten Element zurück und löst die Reaktivität durch Neuzuweisung aus.
4
rows.value = rows.value.toSpliced(targetIndex, 1);
Entfernt das Element an targetIndex ohne Mutation und liefert eine neue Array-Referenz.