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

130
Vistas
La actualización de estado condicional de React no funciona

Estoy tratando de crear un formulario en el que el usuario pueda crear un curso pagado/gratis. Si se paga, elija el precio, pero si el precio es gratis = 0,

ingrese la descripción de la imagen aquí

Este es mi estado predeterminado:

 const [values, setValues] = useState({ name: "", description: "", category: "", price: 500, paid: true, uploading: false, loading: false, });

Problema: si hago clic en un curso pagado, mi precio predeterminado es 500 , que es el primer precio de la lista de precios. Pero cuando cambio a Curso gratuito, el estado cambia a "pagado: falso" pero el último precio seleccionado se mantuvo como en la imagen a continuación

ingrese la descripción de la imagen aquí

¡Alguna idea de cómo cambiar! He intentado de varias maneras pero nada funcionó. Por favor ayuda gracias❤️

Intenté cambiarlo antes de enviarlo al backend, todavía no funcionó.

 const handleSubmit = async (e) => { e.preventDefault(); try { if(values.paid == false) { setValues({...values, price: 0}) } const { data } = await axios.post("/api/course/create-new-course", { ...values, image, }); router.push("/instructor"); toast.success("Continue adding lessions"); } catch (err) { console.log(err); toast.error(err.response.data); } };
about 4 years ago · Juan Pablo Isaza
2 Respuestas
Responde la pregunta

0

Intente actualizar su campo paid en CreateCourseForm de esta manera:

 <select value={values.paid ? '1' : '0'} onChange={(e) => { const isPaid = e.target.value == '1'; setValues({ ...values, price: isPaid ? 500 : 0 , paid: isPaid }) }} className="select select-bordered select-secondary w-full lg:w-4/5 mb-3 rounded-none lg:rounded-lg" > <option value={'0'}> Free Course </option> <option value={'1'}>₹ Paid Course</option> </select>
about 4 years ago · Juan Pablo Isaza Denunciar

0

Llamar a setState() en React es asíncrono, por varias razones (principalmente de rendimiento). Debajo de las sábanas, React agrupará múltiples llamadas a setState() en una sola mutación de estado, y luego volverá a renderizar el componente una sola vez, en lugar de volver a renderizar para cada cambio de estado.

Afortunadamente, la solución es bastante simple: setState acepta un parámetro de devolución de llamada:

Así que prueba esto: -

 const handleSubmit = async (e) => { e.preventDefault(); try { if(values.paid == false) setValues(prevValues => ({...prevValues, price: 0})); const { data } = await axios.post("/api/course/create-new-course", { ...values, image, }); router.push("/instructor"); toast.success("Continue adding lessions"); } catch (err) { console.log(err); toast.error(err.response.data); } };
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