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

154
Vistas
Reactjs no llama a la devolución de llamada de cambio en el niño

He escrito un componente de entrada reutilizable para url si una url no comienza con http , entonces se agregará http al principio.

Aquí tienes el componente

 import React, {useContext, useCallback} from 'react'; const InputURL = ({ name, onChange, ...rest}) => { const sanitizeURLonChange = React.useCallback((value, actionMeta) => { if (value.target.value) { if (!value.target.value.startsWith('http')) { value.target.value = 'http://' + value.target.value } } }, [onChange]) return ( <> <input name={name} {...rest} onChange={sanitizeURLonChange} /> </> ); } export default InputURL;

Pero cuando trato de usarlo en algún componente, onChange no funciona

lo intento de esta manera

 <InputURL onChange={(e) => console.log(e.target.value)} />

desafortunadamente inputURL onChange ya no funciona, ¿pueden ayudarme en este caso?

quiero lograr si el usuario ingresa la URL sin http, agregará http,

Como lo stackoverflow.com/ y luego devolverá https://stackoverflow.com/ en Onchange

about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Creo que tu problema está aquí:

 value.target.value = 'http://' + value.target.value

Está intentando actualizar el value de entrada sin usar un gancho.

Intenta reescribir tu código de esta manera:

 import React, { useState } from 'react'; const InputURL = ({ name, onChange, ...rest}) => { const [val, setVal] = useState(""); const sanitizeURLonChange = (value, actionMeta) => { if (value.target.value) { if (!value.target.value.startsWith('http')) { setVal('http://' + value.target.value); } else setVal(value.target.value); } } return ( <> <input name={name} {...rest} value={val} onChange={sanitizeURLonChange} /> </> ); } export default InputURL;

Aquí codesandbox ejemplo de trabajo.

about 4 years ago · Juan Pablo Isaza Denunciar

0

Está cerrando el corchete justo después del argumento del evento: {(e)} . Prueba así:

 <inputURL onChange={(e, val) => console.log(val)} />

también tienes que usar el onChange que estás pasando como accesorios:

 const sanitizeURLonChange = (e, actionMeta) => { let newValue = e.target.value if (newValue) { if (!newValue.startsWith('http')) { newValue = "http://" + newValue } } setVal(newValue); onChange(event, newValue) }

pero de todos modos parece que el onChange que está pasando como accesorios para inputURL no se usa en ninguna parte, por lo que no estoy seguro de lo que quiere lograr. También está llamando al componente inputURL en lugar de InputURL y la primera letra mayúscula es muy importante en JSX.

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