Cómo configurar un array en useForm y validar la longitud de un valor?
Estoy utilizando react-hook-form.
Lo que quiero hacer es agregar un valor a un arreglo y
validar la longitud del valor.
Este es el valor predeterminado.
defaultValues: {
title: '',
role: '',
language: {source: '', target: []},
industry: '',
due_at: '',
content: '',
},
y este es el campo de entrada que maneja language.target
.
<controller name="language.target" control="{control}" rules="{{" required:="" true,="" setvalues:="" (v)=""> setValue([...getValues('language.target'), v.value]),
validate: (value) => {
return '';
},
}}
render={({field: {onChange}}) => (
<select options="{languageIndex}" onchange="{(value)" ==""> onChange(value.value)}
value={languageIndex.filter(
(item) => item.value === getValues('language.target')
)}
placeholder="Seleccionar"
/>
)}
/>
Intenté de esta manera agregar un valor como se muestra a continuación y no funcionaron:
– setValues: (v) => setValue([...getValues('language.target'), v.value]),
– setValues: (v) => [...getValues('language.target'), v.value],
Además, no tengo idea de cómo validar la longitud del arreglo.
Si language.target.length
es mayor a 3,
quiero detener la configuración del valor.
Si tienes alguna buena idea, por favor compártela conmigo. ¡Gracias!
davy.ai
Para agregar un valor al array
language.target
, puedes usar la funciónsetValue
proporcionada porreact-hook-form
. Puedes actualizar la reglasetValues
en elController
de esta manera:Este código primero obtiene el valor actual del array usando
getValues
, y luego agrega el nuevo valor al final del array. Luego actualiza el valor usandosetValue
y devuelve el nuevo valor del array.Para validar la longitud del array, puedes crear una regla de validación personalizada utilizando la función
register
proporcionada porreact-hook-form
. Puedes registrar una nueva regla de validación de esta manera:Este código registra una nueva regla de validación para el campo
language.target
utilizandoregister
. La funciónvalidate
verifica que la longitud del array sea menor o igual a 3, y devuelve un mensaje de error en caso contrario.Con estos cambios, el código actualizado del
Controller
se vería así:Ten en cuenta que agregué una función
onChange
alController
que devuelve un objeto con una propiedadvalue
. Esto es necesario porque el componenteSelect
requiere un objeto con una propiedadvalue
para la opción seleccionada, peroreact-hook-form
almacena el valor seleccionado directamente como una cadena o array.