#arrays #reactjs #state
Вопрос:
У меня есть это состояние массива :
const [players, setPlayers] = useState([]);
Я хочу каждый раз, когда я добавляю игрока, добавлять новое значение в дополнение к предыдущим,
поэтому я сделал это:
const addPlayerHandler = (name) => {
setPlayers({ players: [...players, name] });
};
когда я добавляю первое значение, оно работает нормально, но второе значение выдает ошибку : игроки не могут повторяться, когда массивы стали едиными ?
Ответ №1:
Игроки-это массив, а не объект, вы можете сделать: setPlayers( […игроки, имя] );
Ответ №2:
Вы setPlayers()
присваиваете переменной объект (с players
ключом) в качестве значения players
.
Вместо этого то, что вы ищете, это setPlayers(prevPlayers => [...prevPlayers, name])
Поэтому вам нужно назначить массив вместо объекта.
Ответ №3:
Вы можете сделать что-то вроде этого:-
const [player, setPlayer] = useState({});
const [players, setPlayers] = useState([]);
const addPlayerHandler = (name,e) => {
e.preventDefault();
if (name.trim() !== "") {
const newPlayer = {
player_id: `p_${Date.now()}`,
player_name: name,
};
const palyersList = [...players];
palyersList.push(newPlayer);
setPlayer({});
setPlayers(palyersList);
}
else {
setPlayer({});
console.log(`error`,"Invalid or Empty Player Details");
}
};
Ответ №4:
Какова ваша структура данных?
Вот так?
[{ name: 'player 11', }]
если выше, попробуйте setPlayers({ players: [...players, { name }] });