ну, в принципе, они не совпадают, код вашего коллеги работает только потому, что он использует старую ссылку на объект.Итак, давайте посмотрим:
updatePlayer = id => {
const players = this.state.players.map(player => {
player.updated = player.id === id ? true:false;
return player
});
this.setState({players: players});
}
на вашей функции, вы создаете новый array
, используя ваш старый массив, который является правильным способом сделать это.
updatePlayer = id => {
const playerObj = this.state.players.find(item => {
return item.id === id
})
if (playerObj) {
playerObj.updated = true
this.setState({ playerObj })
}
}
здесь ваш друг редактирует ссылку на объект, который он получил с помощью find
, а затем сохраняет playerObj
, который является не чем иным, как ссылкой на игрока из массива, который вы хотите редактировать.после этого вы должны заметить, что новое состояние будет выглядеть примерно так:
this.state = {
players: [p1, p2 ,p3, p4], // each p is a player.
//notice that playerObj is now a reference to some of the P on the players array
playerObj: {
...playerstuff,
updated: true
}
}
надеюсь, это поможет:)