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

188
Visualizações
El estado del niño no se representa correctamente

Estoy creando una aplicación de blackjack y tengo problemas para volver a representar las manos después de las manos iniciales. Estoy tratando de actualizar mi estado en App.js y pasarlo a PlayerHand.js para que se procese, pero el componente secundario no se vuelve a representar, aunque un archivo console.log muestra que el estado se ha actualizado en App. Curiosamente, si presiono ctrl-s en mi editor de texto, PlayerHand.js se actualizará, incluso si no he cambiado nada en el código.

Aplicación.js

 function App() { const [lobbyState, updateLobbyState] = useState(''); const [playerHand, updatePlayerHand] = useState([]); //code that updates my state const hit = () => { socket.emit('hit', roomName, function(newCard){ hit console.log('old player hand is ' + playerHand); var newHand = playerHand; newHand.push(newCard); updatePlayerHand(newHand); console.log('new player hand is ' + playerHand); //this shows a different hand than the first print statement }); } //renders initial hands; seems to be working, but included in case it's relevant socket.on('initialHands', (data) => { updateRoomName(data.roomName); var newHand = data.playerHand; updatePlayerHand(newHand); updateOpponentHand(opponentHand.concat([data.opponentFirstCard, 'back'])); updateLobbyState('started'); }) switch(lobbyState){ case 'started': return ( <div className="lobby"> <OpponentHand opponentHand = {opponentHand}/> <PlayerHand playerHand = {playerHand} /> {currentPlayer ? <PlayerActions hit={hit} stand={stand} /> : <h1> Not your turn </h1>} </div> ) case 'waiting': return ( <Waiting /> ) default: return ( <Home createRoom={createRoom} joinRoom={joinRoom} /> ) }

PlayerHand.js

 import React, {useState, useEffect} from 'react'; import cards from './exports'; function PlayerHand (props){ const [hand, updateHand] = useState([]); useEffect(() => { var newHand = props.playerHand; updateHand(newHand); }, [props.playerHand]); return ( <div> {hand.map((card) => (<img src={cards[card]} alt="card" className="card"/>))} </div> ) } export default PlayerHand;
about 4 years ago · Juan Pablo Isaza
2 Respostas
Responde à pergunta

0

Probar:

 const hit = () => { socket.emit('hit', roomName, function(newCard){ hit console.log('old player hand is ' + playerHand); var newHand = [ ...playerHand ]; // <----- ***** THIS ******* newHand.push(newCard); updatePlayerHand(newHand); console.log('new player hand is ' + playerHand); //this shows a different hand than the first print statement }); }

Cuando haces var newHand = playerHand , en realidad nunca estás creando un nuevo objeto, solo una nueva referencia. var newHand = [ ...playerHand ]; por otro lado (juego de palabras intencionado) crea un nuevo objeto que hace que el estado cambie y se vuelva a renderizar.

about 4 years ago · Juan Pablo Isaza Relatório

0

Prueba updatePlayerHand(playerHand.concat(newCard)) .

se debe usar concat en lugar de push con setState . Sin embargo, no estoy seguro acerca del gancho useState .

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