Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

137
Visualizações
Revertir estado para el segundo clic

Tengo problemas para revertir un estado. Lo que estoy tratando de lograr es que cuando hago clic en un botón de reproducción (PlayContainer), cambio el contenido dentro de {reproducir}. Esta función funciona, pero tengo problemas para revertir el cambio con otro clic {detener}. (Estoy usando componentes con estilo para que los elementos tengan nombres establecidos).

 export default function Play() { const [play, setStatus] = useState(() => { return ( <RadioContainer> <PlayButton src="/img/play.svg" /> </RadioContainer> ); }); function start() { setStatus(() => { return ( <RadioContainerSecond onClick={stop}> <PlayButton src="/img/pause.svg" /> <Video width="560" height="315" src="https://www.youtube.com/embed/21qNxnCS8WU?autoplay=1&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" /> </RadioContainerSecond> ); }); } function stop() { setStatus(() => { return ( <RadioContainer> <PlayButton src="/img/play.svg" /> </RadioContainer> ); }); } return ( <OuterCircle> <InnerCircle> <PlayContainer onClick={start}>{play}</PlayContainer> </InnerCircle> </OuterCircle> ); }

Tal vez estoy haciendo esto mal, por favor avíseme si hay algún método más fácil o mejor.

about 4 years ago · Juan Pablo Isaza
3 Respostas
Responde à pergunta

0

Almacenar JSX en estado React es generalmente antipatrón en React. Debe almacenar datos y representar su interfaz de usuario a partir de los datos almacenados en el estado. Almacene un valor booleano en el estado para representar el estado de reproducción/detención y represente condicionalmente un elemento u otro en función del estado actual.

 export default function Play() { const [play, setStatus] = useState(false); function start() { setStatus(true); } function stop() { setStatus(false); } return ( <OuterCircle> <InnerCircle> <PlayContainer onClick={start}> {play ? ( <RadioContainerSecond onClick={stop}> <PlayButton src="/img/pause.svg" /> <Video width="560" height="315" src="https://www.youtube.com/embed/21qNxnCS8WU?autoplay=1&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" /> </RadioContainerSecond> ) : ( <RadioContainer> <PlayButton src="/img/play.svg" /> </RadioContainer> )} </PlayContainer> </InnerCircle> </OuterCircle> ); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Creo que es mejor usar un booleano para play en lugar de un componente. Luego puede alternar el componente según el booleano de play de esta manera:

 export default function Play() { const [play, setPlay] = useState(false); // Boolean instead of component function start() { setPlay(true); // Simply toggle boolean } function stop() { setPlay(false); // Simply toggle boolean } return ( <OuterCircle> <InnerCircle> <PlayContainer onClick={start}> { {/* Toggle between the 2 components based on the play boolean */} play {/* If play is true use RadioContainerSecond */} ? (<RadioContainerSecond onClick={stop}> <PlayButton src="/img/pause.svg" /> <Video width="560" height="315" src="https://www.youtube.com/embed/21qNxnCS8WU?autoplay=1&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" /> </RadioContainerSecond>) {/* If play is false use RadioContainer */} : (<RadioContainer> <PlayButton src="/img/play.svg" /> </RadioContainer>) } </PlayContainer> </InnerCircle> </OuterCircle> ); }
about 4 years ago · Juan Pablo Isaza Relatório

0

Hay algunos problemas en su código. En primer lugar, está almacenando elementos JSX en un estado que es una mala idea. En segundo lugar, este componente tiene 2 declaraciones de retorno (debería dar un error). Su código se puede actualizar a esto en su lugar:

 export default function Play() { const [play, setStatus] = useState(false) const mainComponent = !play ? <RadioContainer> <PlayButton src="/img/play.svg" onClick={() => setState(true)}/> </RadioContainer> : <RadioContainerSecond> <PlayButton src="/img/pause.svg" onClick={() => setState(false)}/> <Video width="560" height="315" src="https://www.youtube.com/embed/21qNxnCS8WU?autoplay=1&controls=0" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" /> </RadioContainerSecond> return ( <OuterCircle> <InnerCircle> { mainComponent } </InnerCircle> </OuterCircle> ); }
about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda