javascript - Reactjs working with sockets: rerender when socket receive a message -
i'm try implement chat application usage of websockets. when websocket got message, no components rerendering. please review code
# main ancestor, chat application @chat = react.createclass componentwillmount: -> @setstate signals: [] # list of signals received websockets socket = new websocket('ws://localhost:19108') socket.onmessage = (event) => @state.signals.push { message: event.data, direction: 'in' } console.log @state.signals # regularly write message console after receiving socket message @setstate socket: socket render: -> <div> <div classname="row"> <div classname="col-md-12"> <signallist signals={@state.signals} /> # pass signals here </div> </div> </div> $ -> react.render(<chat />, document.getelementbyid('container'))
signal list try show changes of props
, no success. it's still empty array
@signallist = react.createclass render: -> <div>{ @props }</div>
i want props
rerendering after each message received websockets. how can that?
you shouldn't mutate @state
directly, instead use setstate
enqueue state update which, once performed, cause component re-render. should consider @state
, value read-only of time.
in case, replace
@state.signals.push { message: event.data, direction: 'in' }
with
@setstate signals: @state.signals.concat([{ message: event.data, direction: 'in' }])
unlike array::push
, array::concat
has benefit of not mutating source array, means @state.signals
stays unchanged until state update has been performed.
Comments
Post a Comment