pusher / pusher-websocket-react-native

React Native official Pusher SDK
MIT License
61 stars 52 forks source link

useState troubles to update when receiving new events #125

Open SergeyMelnyk opened 9 months ago

SergeyMelnyk commented 9 months ago

Hello everyone, please help with an issue I encountered while using pusher-websocket-react-native. I'm trying to implement a small chat, and the problem is that when I receive a notification in the onEvent method and try to update my local state, the messages value always equals an empty array.

cosnt [messages, setMessages] = useState([])
useEffect(() => {
      getInitialMessagesByRestApi().then(res => {setMessages(res.data)})
}, [])

...
const onEvent = () => {
const onEvent = event => {
    const parsedData = JSON.parse(event.data)

   setMessages([...messages, event.data]) <-- messages in this place always empty
}

I already tried to get initial messages after pusher init, it works but when i am gettig few events like one by one it , messages array always equal to initial without prev message from pusher events

robsoden commented 9 months ago

I'm also struggling with this. onEvent handlers seem to be completely unaware of any state changes - they only have a snapshot of state when pusher was initiated. This makes it really difficult to do anything useful with events in a modern functional component react native app...

benw-pusher commented 6 months ago

Could you update to setMessages(messages => ([...messages, event.data])); ? With this I was able to see the array being updated correctly.