【发布时间】:2021-01-04 19:26:29
【问题描述】:
我正在尝试使用 websockets 连接到Kraken websocket API。我在初始渲染上创建了一个新实例并设置了侦听器。我正在尝试制作按钮来订阅和关闭,但按钮不起作用。
我正在使用this websocket 库。
const WebSocket = require('isomorphic-ws')
function App() {
const ws = new WebSocket('wss://ws.kraken.com')
useEffect(() => {
ws.onopen = () => {
console.log('connected')
}
ws.onmessage = (msg) => {
const message = JSON.parse(msg.data)
const sub = message[2]
console.log(message)
}
ws.onclose = () => {
console.log('closing connection')
// ws.close()
}
return () => {
ws.close()
}
}, [])
const wsClose = () => {
ws.close()
}
const wsSub = () => {
ws.send(JSON.stringify(
{
"event": "subscribe",
"pair": [
"XBT/USD"
],
"subscription": {
"name": "ticker"
}
}
))
console.log('send subscribe')
}
return (
<button onClick={wsSub}>subscribe</button>
<button onClick={wsClose}>close ws</button>
)
}
export default App
如果我将wsSub 函数中的代码放在ws.onopen 侦听器下,订阅就可以工作,但是我想控制打开websocket 时不订阅的订阅。我正在使用这样的按钮进行测试。我想根据用户表单提交来订阅和取消订阅,但我觉得我应该能够先完成这项工作。
【问题讨论】: