реакция : состояние массива не может быть повторено

#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 }] });