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

265
Vistas
ref prop no se pasa, TypeError: null no es un objeto (evaluando 'inputRef.current.focus')

Estoy haciendo un componente de entrada personalizado.

 const CustomInput = (props) => { console.log(props); return ( <TextInput {...props} ref={props.ref} placeholder={props.placeholder} style={{ ...styles.text, ...props.style }} /> ); };

en el archivo quiero usarlo tengo

 const ForgottenPasswordScreen = (props) => { ... const inputRef = React.createRef(); useEffect(() => { inputRef.current.focus(); }, []); ... <CustomInput placeholder={"E-mail..."} value={email.value} ref={inputRef} onChangeText={(text) => setEmail({ value: text, error: "" })} /> ...

Si estoy usando TextInput normal, no hay problema, pero cuando trato de usar CustomInput, aparece el error

TypeError: null no es un objeto (evaluando 'inputRef.current.focus')

No entiendo por qué ref={props.ref} no está haciendo el trabajo. Pensé que la referencia también se pasará a mi componente. ¿Cómo pasar la referencia correctamente?

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

0

El árbitro no está dentro de props . Cuando se usa ref como accesorio, los componentes de función deben crearse con forwardRef() , que toma una función que tiene dos argumentos, props y ref .

Aquí está el ejemplo de la documentación https://reactjs.org/docs/forwarding-refs.html

 const FancyButton = React.forwardRef((props, ref) => ( <button ref={ref} className="FancyButton"> {props.children} </button> )); // You can now get a ref directly to the DOM button: const ref = React.createRef(); <FancyButton ref={ref}>Click me!</FancyButton>;
about 4 years ago · Juan Pablo Isaza Denunciar

0

Entonces con esto podemos determinar si queremos que seleccione la entrada o no

la razón es que la referencia no se puede transmitir ya que es una referencia a ese componente a menos que use React.forwardRef pero esta es una forma sin forwardRef

importar { useEffect, useRef } de "reaccionar"; importar "./estilos.css";

 const InsantSelectInput = (props) => { const inputRef = useRef(null) useEffect(() => { if(inputRef && inputRef.current) inputRef.current.focus() }, [inputRef]) return <input {...props} ref={inputRef} placeholder={props.placeholder} />; } const CustomInput = (props) => { return <> {props.isSelectedInput && <InsantSelectInput {...props} />} {!props.isSelectedInput && <input {...props} placeholder={props.placeholder} />} </> }; export default function App() { return ( <div className="App"> <h1>Hello CodeSandbox</h1> <h2>Start editing to see some magic happen!</h2> <CustomInput placeholder={"E-mail..."} value={""} isSelectedInput onChangeText={(text) => console.log({ value: text, error: "" })} /> </div> ); }

O con forwardRef

 const CustomInput = React.forwardRef((props, ref) => { return <> <TextInput {...props} ref={ref} placeholder={props.placeholder} style={{ ...styles.text, ...props.style }} /> }); const ForgottenPasswordScreen = (props) => { ... const inputRef = React.createRef(); useEffect(() => { inputRef.current.focus(); }, []); ... <CustomInput placeholder={"E-mail..."} value={email.value} ref={inputRef} onChangeText={(text) => setEmail({ value: text, error: "" })} /> ...
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