I’d like to bind to js WebSocket object.
So far I came up with this :
type data
type event = {
data: data
}
type socket = {
onmessage: event => unit
}
@new external createWebSocket: string => socket = "WebSocket"
let ws = createWebSocket("ws://localhost:8000/ws");
Now I’d like give ws.onmessage eventHandler a function but compiler says its immuable so I can’t just write
ws.onmessage = (event) => {/* do something with event.data */}
How should I do it ?
You will need to use a property setter binding: bucklescript-bindings-cookbook/ReScript.md at master · yawaramin/bucklescript-bindings-cookbook · GitHub
In this case it will look like this:
// WebSocket.re
type t
type messageEvent = {data: string}
type messageEventHandler = messageEvent => unit
@new external new_: string => t = "WebSocket"
@set external set_onmessage: (t, messageEventHandler) => unit = "onmessage"
EDIT: usage looks like:
// In another module
let ws = WebSocket.new_("ws://...")
ws->WebSocket.set_onmessage(({data}) => Js.log(data))
2 Likes