58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
|
"use client"
|
||
|
|
||
|
import { Button } from '@/components/ui/button';
|
||
|
import { v4 } from "uuid"
|
||
|
import { useEffect, useState } from 'react';
|
||
|
import useWebSocket from 'react-use-websocket';
|
||
|
|
||
|
const socketUrl = 'wss://echo.websocket.org';
|
||
|
|
||
|
const SocketPage = () => {
|
||
|
const [mounted, setMounted] = useState(false)
|
||
|
|
||
|
const {
|
||
|
sendMessage,
|
||
|
sendJsonMessage,
|
||
|
lastMessage,
|
||
|
lastJsonMessage,
|
||
|
readyState,
|
||
|
getWebSocket,
|
||
|
} = useWebSocket(socketUrl, {
|
||
|
onOpen: () => console.log('opened'),
|
||
|
onMessage: (e) => console.log("MESSAGE", e),
|
||
|
onError: (e) => console.error(e),
|
||
|
shouldReconnect: (closeEvent) => { console.log("Reconnect"); return true; },
|
||
|
});
|
||
|
const [messageHistory, setMessageHistory] = useState<MessageEvent[]>([]);
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (lastMessage !== null) {
|
||
|
console.log("LAST", lastMessage)
|
||
|
setMessageHistory((prev) => prev.concat(lastMessage));
|
||
|
}
|
||
|
}, [lastMessage, setMessageHistory]);
|
||
|
|
||
|
useEffect(() => {
|
||
|
if (!mounted) {
|
||
|
setMounted(true)
|
||
|
}
|
||
|
}, [])
|
||
|
|
||
|
return (<div className="w-full bg-blue-300">
|
||
|
<p>Hello</p>
|
||
|
<p>{readyState}</p>
|
||
|
<Button onClick={() => sendMessage("uisdhnishdadasdfsd " + v4())}>
|
||
|
Click on me
|
||
|
</Button>
|
||
|
<div>
|
||
|
{lastMessage ? <span>Last message: {lastMessage.data}</span> : null}
|
||
|
<ul>
|
||
|
{messageHistory.map((message, idx) => (
|
||
|
<p className='block' key={idx}>{message ? message.data : null}</p>
|
||
|
))}
|
||
|
</ul>
|
||
|
</div>
|
||
|
</div>)
|
||
|
}
|
||
|
|
||
|
export default SocketPage
|