Traté de construir este método addgamer() para verificar si el nombre de usuario existe en la matriz de jugadores al hacer clic en el botón Agregar y, si es así, quiero que no agregue su información como un objeto en la matriz, quiero saber por qué no no funciona? ....creé este método enterdata() para obtener los valores de estos tres jugadores al cambiar los valores de sus entradas
class App extends Component { state= { gamer:{ FirstName:"", LastName: "", UserName: "", }, gamers:[], } enterdata = (event)=> { const {name, value} = event.target; this.setState((prevstate)=>({ gamer: {...prevstate.gamer,[name] : value}, })) } addgamer = (event) =>{ event.preventDefault(); for(let i = 0;i<this.state.gamers.length; i++){ if(this.state.gamer.UserName === this.state.gamers[i].UserName){ return false; }else{ this.setState(prevstate =>({ gamers: [...prevstate.gamers, this.state.gamer], gamer: {FirstName:"", LastName: "", UserName: ""}, })) } } }
El problema aquí es que estás agregando al jugador cada vez que no se encuentra el nombre de usuario. Lo que debe hacer es establecer una marca para ver si el nombre de usuario se encontró en la lista de jugadores o no, y luego hacer setState
para agregar el nuevo jugador si no se encontró el nombre de usuario, así:
let found = false; for(let i = 0;i<this.state.gamers.length; i++){ if(this.state.gamer.UserName === this.state.gamers[i].UserName){ found = true; break; } } // alternatively: let found = this.state.gamers.find(gamer => this.state.gamer.UserName === gamer.UserName) if (!found) { this.setState(prevstate =>({ gamers: [...prevstate.gamers, this.state.gamer], gamer: {FirstName:"", LastName: "", UserName: ""}, })) }