Не обновляется состояние в useEffect

import RoomList from '../RoomList/RoomList'
import PostList from '../PostList/PostList'

export default function Socket2({client}) {
   const [room, setRoom] = useState('')
   const [message, setMessage] = useState('')
  const [rooms, setRooms] = useState([])

   console.log('messages3', rooms)
   const connectRoom = () => {
    client.emit('create', room)
   }

   const sendMessage = () => {
    client.emit('mes', {message, room})
   }

   useEffect(() => {
    client.on('connect', () => {
        client.emit('connection')
    })
    client.on('mess', (data) => {
      const {message, room } = data;
      console.log(data)
      // setRooms(prev => [...prev, data.message])
      const isRoom = rooms.findIndex(r => r.id === room);
      console.log('rooms', rooms)
      if (isRoom !== -1) {
        console.log('есть')
        rooms[isRoom].messages= [...rooms[isRoom].messages, message]
        setRooms([...rooms]);
      } else {
        console.log('такого нет')
        setRooms(prev => [...prev, { id: room, messages: [message] }]);
      }
    })
    client.on('disconnect', () => {
        console.log("Отключение")
      })
    return () => {
      client.disconnect();
      }
   }, [client])

  return (
    <div>
      <input type="text" value={room} onChange={e => setRoom(e.target.value)}/>
      <button onClick={connectRoom}>Присоединиться</button>
      <input type="text" value={message} onChange={(e) => setMessage(e.target.value)}/>
      <button onClick={sendMessage}>Отправить</button>
       <RoomList rooms={rooms}/>
       {/* <PostList room={rooms}/> */}
    </div>
  )
}

Проблема заключается в том, что после того как приходит сообщение с сервера 'mess', я пытаюсь добавить это сообщение в rooms по принципу если такая комната уже существует то добавь в ее массив с сообщениями новое сообщение, а если такой комнаты нет, то добавь в rooms новую комнату с пришедшим сообщением. Но по непонятно мне причине rooms не обновляется и поэтому в проверки на наличие комнаты нет смысла, т.к. её никогда нет. А console.log('rooms', rooms) всегда выводит пустой массив


Ответы (0 шт):