Массив с useState не обновляет значение внутри функции websocket

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