React setState не обновляет состояние

#javascript #reactjs #socket.io

#javascript #reactjs #socket.io

Вопрос:

Я читал, что setState является асинхронным, но я не вижу, что здесь это так, потому что я могу зарегистрировать «particip» на консоли. Все остальные setStates находятся в состоянии ожидания. Я не понимаю, почему только setParticipants ничего не делает. Вначале я подумал, что, поскольку «particip» — это массив объектов, я делаю что-то не так. Позже я попробовал с простыми буквами и цифрами, просто чтобы посмотреть, будет ли обновлено состояние или нет. К моему большому удивлению, ничего не происходило, и я, честно говоря, не понимаю, почему.

 const [participants, setParticipants] = useState();
useEffect(() => {
  const socket = io(BASE_URL);
  setSocket(socket);
  socket.on("msgToClient", (msg) => {
    setChat((chat) => [...chat, { ...msg }]);
  });
  socket.on("joinedRoom", (particip) => {
    console.log(particip);
    setParticipants(particip);
    console.log(participants);
  });

  socket.on("leftRoom", (particip) => {
    console.log(particip);
    setParticipants(particip);

    console.log(participants);
  });
}, []);
  

Комментарии:

1. Где setState вызов?

2. Да, setParticipants это выполняется асинхронно setParticipants(particip) и console.log(participants) сразу после этого всегда будут отображаться старые данные. Чего вы пытаетесь достичь?

3. Чтобы гарантировать, что когда я вызываю setParticipants, он будет выполнен, и состояние будет установлено, поэтому я могу его использовать. Хотя я не понимаю, как работает другой setChat и устанавливает его состояние без проблем.