• Empleos
  • Sobre nosotros
  • profesionales
    • Inicio
    • Empleos
    • Cursos y retos
  • empresas
    • Inicio
    • Publicar vacante
    • Nuestro proceso
    • Precios
    • Evaluaciones
    • Nómina
    • Blog
    • Comercial
    • Calculadora de salario

0

125
Vistas
El formulario de revisión de reacción no envía la revisión al enviar

Solo quiero hacer un prefacio de que estoy aprendiendo JavaScript y React, así que todo esto es muy nuevo para mí.

Estoy creando una aplicación de calificación de películas "simple" y necesito poder enviar una revisión a un div "al enviar" y no puedo averiguar cómo hacerlo. Intenté usar el estado de actualización en reaccionar y / o crear funciones para intentar lograr esto y no puedo entender cómo hacerlo por mi vida. Tuve algo de éxito usando el último método, pero recibía errores sobre el uso de accesorios clave únicos. El otro problema fue que debo usar un componente de calificación de estrellas y cuando envié la revisión, no estaba enviando eso al div. Aquí es donde estoy actualmente:

 import { Button, Form, Input } from "reactstrap"; import Stars from "./stars"; export default function ReviewForm() { const [reviews, setReviews] = useState(""); const onChange = (e: any) => { setReviews(e.target.value); }; const onSubmit = (e: any) => { console.log("Form Submitted"); }; return ( <div className="form-container"> <Stars /> <Form onSubmit={onSubmit}> <Input className="form-control" type="text" placeholder="Enter you review" value={reviews} onChange={onChange} /> <br></br> <Button type="submit" className="btn btn-primary"> Submit </Button> </Form> </div> ); } // This is what I have in my Stars component: import React, { useState } from "react"; import { FaStar} from 'react-icons/fa' const Stars = () => { const [rating, setRating] = useState(0); const [hover, setHover] = useState(null); return( <div> {[...Array(5)].map((star, i) => { const ratingValue = i + 1; return <label> <input type="radio" name="rating" value={ratingValue} onClick={() => setRating(ratingValue)} /> <FaStar className="star" color={ratingValue <= (hover || rating) ? "gold" : "lightgray"} size={20} onMouseEnter={() => setHover(ratingValue)} onMouseLeave={() => setHover(null)} /> </label>; })} <p>I rate this movie {rating + " stars"}</p> </div> ); }; export default Stars```
about 3 years ago · Juan Pablo Isaza
3 Respuestas
Responde la pregunta

0

Aquí está la versión de trabajo de su código. Debe usar key en su map y e.preventDefault() en su función de envío de formulario. Como toque final, debe establecer otro state dentro de su envío de formulario y mostrar este valor en un div o algún elemento html. También veo que desea convertir el estado del niño en el padre para que pueda devolver la llamada para esto https://codesandbox.io/embed/brave-euler-ybp9cx?fontsize=14&hidenavigation=1&theme=dark

Formulario de revisión.js

 export default function ReviewForm() { const [reviews, setReviews] = useState(""); const [value, setValue] = useState(""); const [star, setStar] = useState(); const onChange = (e: any) => { setReviews(e.target.value); }; const onSubmit = (e: any) => { e.preventDefault(); setValue(reviews + " with " + star + " star "); }; return ( <div className="form-container"> <Stars setStar={setStar} /> <Form onSubmit={onSubmit}> <Input className="form-control" type="text" placeholder="Enter you review" value={reviews} onChange={onChange} /> <br></br> <Button type="submit" className="btn btn-primary"> Submit </Button> <div>{value}</div> </Form> </div> ); }

estrellas.js

 const Stars = ({ setStar }) => { const [rating, setRating] = useState(0); const [hover, setHover] = useState(null); const handleClick = (ratingValue) => { setRating(ratingValue); setStar(ratingValue); }; return ( <div> {[...Array(5)].map((star, i) => { const ratingValue = i + 1; return ( <label key={i}> <input type="radio" name="rating" value={ratingValue} onClick={() => handleClick(ratingValue)} /> <FaStar className="star" color={ratingValue <= (hover || rating) ? "gold" : "lightgray"} size={20} onMouseEnter={() => setHover(ratingValue)} onMouseLeave={() => setHover(null)} /> </label> ); })} <p>I rate this movie {rating + " stars"}</p> </div> ); }; export default Stars;
about 3 years ago · Juan Pablo Isaza Denunciar

0

import { Button, Form, Input } from "reactstrap"; import Stars from "./stars"; export default function ReviewForm() { const [Reviews, setReviews] = useState(""); const [ReviewsRating, setReviewsRating] = useState(5); const [Reviews_, setReviews_] = useState([]); const onChange = (e: any) => { setReviews(e.target.value); }; const onSubmit = (e: any) => { e.preventDefault() console.log("Form Submitted"); //After upload to the server setReviews_([Reviews, ...Reviews_] }; return ( <div className="form-container"> <Stars getRating={getRating}/> <Form onSubmit={onSubmit}> <Input className="form-control" type="text" placeholder="Enter you review" value={reviews} onChange={onChange} /> <br></br> <Button type="submit" className="btn btn-primary"> Submit </Button> </Form> <div class="reviews"> {Reviews_.map(item => <div> {item}</div> )} </> </div> ); }```

Luego, para obtener el valor de calificación de estrellas, use accesorios como ... Y asegúrese de llamar a esa propiedad (función) dentro de su componente Inicio

 const getRating =(value)=>{ setReviewsRating(value) }
about 3 years ago · Juan Pablo Isaza Denunciar

0

Probablemente esté viendo una actualización de la página cuando presiona el botón Enviar. Este es el comportamiento predeterminado de los formularios HTML.

Al usar React o cualquier marco de front-end, querrá manejar el envío del formulario usted mismo en lugar de dejar que el navegador envíe sus formularios.

En su función onSubmit , agregue la siguiente línea e.preventDefult()

 const onSubmit = (e: any) => { e.preventDefault() console.log("Form Submitted"); };

Su código funcionará perfectamente.

about 3 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 Nuestro proceso Comercial
Legal
Términos y condiciones Política de privacidad
© 2025 PeakU Inc. All Rights Reserved.

Andres GPT

Recomiéndame algunas ofertas
Necesito ayuda