Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
Error de reacción de useState Demasiadas re-renderizaciones entrada de accesorios de estado de fusión

Tengo problemas para actualizar el estado mediante la combinación de accesorios de entrada seleccionados en una cadena para pasar una ruta adecuada con valores a la API.

Tengo algo como esto en la lógica:

 const [data, setData] = useState({ certificate: '', year: '' }) const merge = () =>{if(data.certificate!==''){(setData(Object.values(data).join("")))}} merge() useEffect(() => { (async () => { try { const params = { data, } const result = await service.getBackendData({ params}) if (result.error) throw result.error setList(result) } catch ({ message }) { console.error('error', message) } })() }, [data])

El propósito del código es obtener dos valores de cadenas del componente de formulario (estoy usando Formik) y esto realmente funciona bien. Pero luego, dos valores dentro del estado (certificado y accesorios del año) deben fusionarse en una cadena para enviar una ruta adecuada a la API y obtener una respuesta.

useEffect parte también funciona, si uso valores por separado, pero en este asunto en particular debo encontrar una manera de conectar estos dos anteriores en una sola cadena.

Traté de crear una función de combinación con la condición de que el usuario seleccionara y, por lo tanto, pasara un valor de certificado, pero eso solo retrasó un error de representación. Después de seleccionar el valor, la función, por supuesto, funciona y une dos valores, pero se crea un bucle infinito.

Leí que cambiar el estado en una fase de renderizado no es una buena idea (por decirlo suavemente), así que no puedo hacerlo de esa manera. Hasta ahora me quedo sin ideas. ¿Qué me estoy perdiendo?

Debajo de la parte del código del Formulario, referente a estos valores. Al hacer clic, el usuario pasa de las opciones seleccionadas un valor de certificado, y luego debo fusionarlo con el valor del año en una cadena.

 const initialValue = { CERTIFICATE: '', YEAR: '&0', } <S.CustomSelect name={certificateInput.certificate.name} placeholder={certificateInput.certificate.placeholder} onClick={setData((prevState) => ({ ...prevState, certificate: values.CERTIFICATE, }))} > {certificatesValues.map((item) => ( <Option key={item.name} value={item.symbol}> {item.name} </Option> ))} </S.CustomSelect>
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Su problema está en la parte de abajo

 const merge = () =>{if(data.certificate!==''){(setData(Object.values(data).join("")))}} merge()

Está llamando a merge() en la parte de representación

Creo que puedes solucionar este problema moviendo merge() a useEffect

 const [data, setData] = useState({ certificate: '', year: '' }) useEffect(() => { (async () => { let params = data if(data.certificate!==''){params = Object.values(data).join(""))} try { result = await service.getBackendData(params); if (result.error) throw result.error setList(result) } catch ({ message }) { console.error('error', message) } })() }, [data])
about 4 years ago · Juan Pablo Isaza Denunciar

0

Cuando se activa el evento onClick, está configurando el estado y reacciona, inicia el proceso de reevaluación y vuelve a renderizar el componente, a medida que ocurre la nueva renderización, se llamará a merge() y esta vez sus condiciones if se vuelven verdaderas y llama a setData() para establezca el estado de los datos, reaccione nuevamente, vuelva a renderizar su componente, se llamará nuevamente a merge () y este ciclo continúa. Mueva merge () dentro de useEffect () para que esto funcione

about 4 years ago · Juan Pablo Isaza Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda