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

170
Visualizações
Establecer el estado en función del valor del elemento de la matriz en el estado anterior

Hola, soy nuevo en la programación y estoy tratando de crear una función en React que agregue un equipo a una variedad de equipos seleccionados, pero solo si hay menos de 2 equipos seleccionados y si el equipo está disponible (no ya elegido). Está trabajando para limitar la matriz a solo 2 valores, pero la matriz aceptará el mismo equipo dos veces y no estoy seguro de por qué. Por ejemplo, si el usuario hace clic en ATL dos veces, ese equipo estará en la matriz dos veces. ¿Qué hice mal aquí y qué debo cambiar para solucionarlo? Lo siento si la pregunta es demasiado simple para este foro, soy nuevo.

Aquí está el código donde estoy cambiando el estado y comprobando si gameState.selected_teams[0] != equipo:

 function App() { const [gameState, setGameState] = useState({ cards: Cards, selected_teams: [] }); function setTeam(team){ if (gameState.selected_teams.length < 2 && gameState.selected_teams[0] != team) { setGameState((prevState) => ({ cards: prevState.cards, selected_teams: [ ...prevState.selected_teams, { team } ] })) } }

Y para el componente que llama a la función setTeam:

 function TeamSelect({cards, setTeam}) { var teams = Object.keys(cards); return ( <div className='flex-container'> <div className='team-container'> { teams.map(team => ( <div onClick={() => setTeam(team)} className='team-label' key={team}> {team} </div> )) } </div> </div> ) }
about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Estás agregando un objeto {team: team} a la matriz de equipos seleccionada cada vez que haces clic aquí:

 selected_teams: [ ...prevState.selected_teams, { team } ]

pero la clave de su team que pasa a su función setTeam es una cadena, por lo que su comparación falla cuando intenta comparar una cadena con un objeto. Puede cambiar su comparación para extraer la propiedad del team de su objeto:

 gameState.selected_teams[0]?.team != team

el ? asegura que exista un valor en el índice 0 en su matriz antes de usar .team en él (de lo contrario, obtendría un error si no está undefined ).

Puede adaptar este código para manejar más de un objeto usando .every() para verificar que todos los objetos en selected_team's no sean iguales al que está agregando:

 if(gameState.selected_teams.length < 2 && gameState.selected_teams.every(obj => obj.team != team)

Si no necesita pasar un objeto {team: team} (ya que un objeto con una propiedad no agrega mucho valor), simplemente puede insertar su cadena de team en sus equipos seleccionados y usar .includes() para compruebe si el equipo que está agregando ya existe en la matriz:

 selected_teams: [ ...prevState.selected_teams, team ]

luego puede actualizar su condición para usar .includes() :

 if(gameState.selected_teams.length < 2 && !gameState.selected_teams.includes(team))
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