Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

145
Views
Restablecer un campo de entrada cuando se escribe otro en React con react-hook-form

Teniendo el siguiente componente:

 import { yupResolver } from '@hookform/resolvers/yup'; import { useForm } from 'react-hook-form'; import * as yup from 'yup'; import { Input, TabsGroup, Button } from './ui-components'; import { usePostFrequency } from '../hooks/use-post-frequency'; const schema = yup.object().shape({ second: yup.number(), minute: yup.number(), triggerName: yup.string().required() }); export function FrequencySetter() { const [isEditMode, setEditMode] = useToggle(false); const emptyTrigger = { second: null, minute: null, triggerName: '' }; const { handleSubmit, register, reset } = useForm({ resolver: yupResolver(schema) }); const { mutate: postFrequency } = usePostFrequency(); const handleCancel = () => { setEditMode(); reset(emptyTrigger); }; const handleSubmitClick = handleSubmit((data) => { setEditMode(); postFrequency(data); }); const frequencyTabs = [ { name: 'per second', children: <div> <Input inputId='second' type='number' {...register('second')} /> </div> }, { name: 'per minute', children: <div> <Input inputId='minute' {...register('minute')} /> </div> } ]; return ( <div> <Input inputId='trigger-name' label='triggerName' {...register('triggerName')} /> <TabsGroup tabs={frequencyTabs} /> <Button title='cancel' onClick={handleCancel} /> <Button title='submit' onClick={handleSubmitClick} /> </div> ); } export default FrequencySetter;

Que tiene que hacer:

  • hay un campo llamado triggerName y otros dos campos, segundo y minuto
  • el primero es una cadena y es obligatorio
  • segundo y minuto son campos numéricos

Hay una funcionalidad de pestaña realizada por un componente importado, TabsGroup, que tiene 2 pestañas, muestra la entrada de segundos en una pestaña, la entrada de minutos en la otra pestaña.

El componente utiliza el formulario de gancho de reacción para la validación, hay 2 botones, cancelar y enviar por razones obvias.

El problema: los datos enviados deben contener el triggerName y uno de segundo o minuto, NO ambos. No sé cómo hacer eso: restablecer de alguna manera el valor de uno cuando estoy introduciendo datos en la entrada del otro.

¿Hay alguna forma de hacer esto?

about 4 years ago · Juan Pablo Isaza
1 answers
Answer question

0

Puede usar watch en los dos campos second y minute y usar useEffect para establecer el setValue del otro campo.

 export function FrequencySetter() { //other code const { handleSubmit, register, reset, watch, setValue } = useForm({ resolver: yupResolver(schema) }); const second = watch("second"); const minute = watch("minute"); useEffect(() => { if (!!second) { setValue('minute', '') } }, [second]); useEffect(() => { if (!!minute) { setValue('second', '') } }, [minute]); //other code }
about 4 years ago · Juan Pablo Isaza Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!