#reactjs #react-hooks
#reactjs #реагирующие крючки
Вопрос:
Я пытаюсь изменить состояние массива, когда в браузере происходит событие, в частности, при запуске websocket, проблема в том, что мой массив сохраняет исходное состояние и никогда не меняется. Спасибо за вашу помощь
export default function StreamPanel(){
const [streamsNotRead, setStreamsNotRead] = useState(["bye"]);
function costumerInfo () {
return new Promise(resolve => {
setTimeout(() => {
const cable = ActionCable.createConsumer(`wss:/aplace`)
const sub = cable.subscriptions.create('SomeChannel', {
received: handleReceiveNewName
})
handleClose()
resolve()
},3000);
});
}
const handleReceiveNewName = m => {
setStreamsNotRead(streamsNotRead => [...streamsNotRead, "hello" ]);
console.log(streamsNotRead)
}
return(</div>)
}
Функция handleReceiveNewName запускается, когда происходит определенное событие (кабель) в браузере, но когда я хочу получить доступ к значению в console.log «привет» никогда не добавляется
Ответ №1:
Передайте новый массив непосредственно функции вместо функции, возвращающей новый массив
const handleReceiveNewName = m => {
setStreamsNotRead([...streamsNotRead, "hello" ]);
console.log(streamsNotRead)
}