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

96
Vistas
Entrada que devuelve una cadena vacía después de enviar

Estoy tratando de obtener los valores y console.log lo que envió ese usuario. Mi mensaje de registro después de enviar devuelve una cadena vacía. Componentes con estilo utilizados para que todos los componentes sean divs excepto Post (formulario), Input (entrada) y Button (botón)

 const [enteredText, setEnteredText] = useState(""); const textHandler = () => event =>{ setEnteredText(event.target.value); }; const submitHandler = (event) => { event.preventDefault(); const textData = { text: enteredText, }; console.log(textData); }; return ( <Post onSubmit={submitHandler}> <TopPost> <ProfilePicture></ProfilePicture> <Input placeholder="What's happening?" required onChange={textHandler} /> </TopPost> <BottomPost> <Button type="submit">Post</Button> </BottomPost> </Post> );
about 4 years ago · Santiago Trujillo
3 Respuestas
Responde la pregunta

0

La función que necesita es la que acepta el event y luego establece el estado, pero ha pasado la función que devuelve esa función en lugar de establecer el estado.

Has escrito:

 onChange={textHandler}

Insetad, debe ejecutar esa función para obtener la función de event aceptado.

Solución 1:

 const [enteredText, setEnteredText] = useState(""); const textHandler = () => event =>{ setEnteredText(event.target.value); }; const submitHandler = (event) => { event.preventDefault(); const textData = { text: enteredText, }; console.log(textData); }; return ( <Post onSubmit={submitHandler}> <TopPost> <ProfilePicture></ProfilePicture> <Input placeholder="What's happening?" required onChange={textHandler()} // Here you have to run this function instead just passing /> </TopPost> <BottomPost> <Button type="submit">Post</Button> </BottomPost> </Post> );

Solución 2 (recomendada, ya que no veo la necesidad de la función de devolución)

 const [enteredText, setEnteredText] = useState(""); // Just use event handler funtion, no need to return nested function const textHandler = event => { setEnteredText(event.target.value); }; const submitHandler = (event) => { event.preventDefault(); const textData = { text: enteredText, }; console.log(textData); }; return ( <Post onSubmit={submitHandler}> <TopPost> <ProfilePicture></ProfilePicture> <Input placeholder="What's happening?" required onChange={textHandler} /> </TopPost> <BottomPost> <Button type="submit">Post</Button> </BottomPost> </Post> );
about 4 years ago · Santiago Trujillo Denunciar

0

¡Prueba esto! y descubra su error todavía no puede encontrarlo, luego hágamelo saber. el componente con estilo debe estar fuera de ti `Publica un componente como este

 import React from 'react'; import { useState } from 'react'; import styled from 'styled-components'; const Post = styled.form` height: 20vh; display: flex; justify-content: center; background-color: white; margin: 0vh 2vw; border-radius: 6px; flex-direction: column; `; const TopPost = styled.div` display: flex; justify-content: space-evenly; height: 50%; align-items: center; `; const ProfilePicture = styled.div` height: 40px; border-radius: 100%; background-color: red; width: 40px; `; const Input = styled.input` width: 80%; border-radius: 6px; padding: 2vh 1vw; border: transparent; background-color: #f0f2f4; font-weight: 500; `; const BottomPost = styled.div` height: 50%; width: 100%; display: flex; align-items: center; justify-content: flex-end; `; const Button = styled.button` margin-right: 2vw; color: white; padding: 0.8vw 2.5vw; background-color: #377dff; border-radius: 6px; outline: none; border: none; cursor: pointer; `; export default function CreatePost() { const [enteredText, setEnteredText] = useState(''); // Just use event handler funtion, no need to return nested function const textHandler = event => { setEnteredText(event.target.value); }; const submitHandler = event => { event.preventDefault(); const textData = { text: enteredText, }; console.log(textData); }; return ( <Post onSubmit={submitHandler}> <TopPost> <ProfilePicture></ProfilePicture> <Input placeholder="What's happening?" required onChange={textHandler} /> </TopPost> <BottomPost> <Button type='submit'>Post</Button> </BottomPost> </Post> ); }
about 4 years ago · Santiago Trujillo Denunciar

0

Creo que es porque tiene paréntesis adicionales en la función textHandler aquí, no deberían estar.

Tu escribiste:

 const textHandler = () => event =>{ setEnteredText(event.target.value); };

Si bien debe ser:

 const textHandler = event => { setEnteredText(event.target.value); };
about 4 years ago · Santiago Trujillo 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