Не обновляется состояние в 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) всегда выводит пустой массив