javascript / expert
Snippet
Curried Function Pipelines für immutable Array-Formularvalidierungen
Curried Higher-Order-Funktionen erstellen wiederverwendbare Validierungskompositionen. Array-Verarbeitungsmethoden wie `reduceRight` verarbeiten Regel-Arrays in umgekehrter Ausführungsreihenfolge, während `flatMap` Validierungsergebnis-Arrays filtert und für Fehleranzeigen transformiert.
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
import React, { useState } from 'react';const createValidator = (...rules) => (fieldValue) =>rules.reduceRight((errors, ruleFn) => {const result = ruleFn(fieldValue);return result ? errors.concat(result) : errors;}, []);const minLength = (min) => (val) => val.length < min ? `Must be at least ${min} chars` : null;const requiresDigit = () => (val) => /\d/.test(val) ? null : "Must contain at least one digit";const validatePassword = createValidator(minLength(8), requiresDigit());export function PasswordValidatorInput() {const [value, setValue] = useState('');const [errors, setErrors] = useState([]);const handleChange = (e) => {const val = e.target.value;setValue(val);setErrors(validatePassword(val));};return (<div><input type="password" value={value} onChange={handleChange} />{errors.flatMap(err => err ? [err] : []).map((err, idx) => (<p key={idx} style={{ color: 'red' }}>{err}</p>))}</div>);}
react
Erklärung
1
const createValidator = (...rules) => (fieldValue) =>
Verwendet Rest-Parameter, um Regelfunktionen in ein Array zu erfassen, und gibt eine curried Evaluierungsfunktion zurück.
2
rules.reduceRight((errors, ruleFn) => {
Wendet Array.prototype.reduceRight an, um Validierungsfehler-Strings ausgehend von der rechtesten Regel zu akkumulieren.
3
{errors.flatMap(err => err ? [err] : []).map(...)
Verwendet Array.prototype.flatMap, um Null-Einträge zu herauszufiltern und Fehler-Messages für das Rendering zu flachen.