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

135
Vistas
Establecer estado dentro del método onClick

Estoy tratando de configurar el estado dentro de un método, tengo un sistema de votación simple (Sí o No) si hace clic en Sí , el estado debe estar arriba y si hace clic en No , el estado debe estar abajo

Tengo problemas para fusionar el método voteHandler y setVote

Aquí está mi componente:

 import React, { useState, useContext } from 'react'; import {AnswerContext} from './AnswerWrapper'; const AnswerItem = (props) => { let indexPlus; const indexCount = (index) => { indexPlus = index; return indexPlus; } const { active, setActive } = useContext(AnswerContext) const [vote, setVote] = useState(); const voteHandler = (e, index) => { e.preventDefault(); setActive(index); setVote(""); // this might be "up" or "down" // I am sending this to a parent component props.onVote ({ vote : vote, answerID : index }) } return ( <div> <button onClick={(e) => voteHandler(e, props.index)}>Yes <span>({props.ups !== null ? props.ups : 0 })</span></button> <button onClick={(e) => voteHandler(e, props.index)}>No <span>({props.downs !== null ? props.downs : 0 })</span></button> </div> ) } export default AnswerItem;
about 4 years ago · Juan Pablo Isaza
1 Respuestas
Responde la pregunta

0

Puede enviar el valor cuando vincula el onClick :

 <button onClick={(e) => voteHandler(e, props.index, 'up')}>Yes <span>({props.ups !== null ? props.ups : 0 })</span></button> <button onClick={(e) => voteHandler(e, props.index, 'down')}>No <span>({props.downs !== null ? props.downs : 0 })</span></button>

Y usa eso en tu voteHandler :

 const voteHandler = (e, index, value) => { e.preventDefault(); setActive(index); setVote(value); // this might be "up" or "down" // I am sending this to a parent component props.onVote ({ vote : vote, answerID : index }) }

Advertencia

Cuando tu lo hagas:

 setVote(value); // this might be "up" or "down" // I am sending this to a parent component props.onVote ({ vote : vote, answerID : index })

No obtendrá el vote actualizado ya que setState es asíncrono. Si desea llamar a props.onVote en cada vote y cambio active , use useEffect :

 const AnswerItem = (props) => { let indexPlus; const indexCount = (index) => { indexPlus = index; return indexPlus; } const { active, setActive } = useContext(AnswerContext) const [vote, setVote] = useState(); useEffect(() => { props.onVote ({ vote : vote, answerID : active }) }, [vote, active]) const voteHandler = (e, index) => { e.preventDefault(); setActive(index); setVote(""); } return ( <div> <button onClick={(e) => voteHandler(e, props.index)}>Yes <span>({props.ups !== null ? props.ups : 0 })</span></button> <button onClick={(e) => voteHandler(e, props.index)}>No <span>({props.downs !== null ? props.downs : 0 })</span></button> </div> ) }
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