import React, { useState, ChangeEvent, FormEvent, useEffect, useRef, } from "react"; type MessageProps = { text: string; side: "sent" | "received" }; const Message = ({ text, side }: MessageProps) => (
{`(${side}) ${text}`}
); function App() { const wsRef = useRef(); const [connected, setConnected] = useState(false); const [messages, setMessages] = useState([]); const [currentMessage, setCurrentMessage] = useState(""); useEffect(() => { const ws = new WebSocket(`ws://${window.location.hostname}:8080`); ws.onopen = () => { setConnected(true); }; ws.onclose = () => setConnected(false); ws.onmessage = (event) => setMessages((m) => [{ side: "received", text: event.data }, ...m]); wsRef.current = ws; }, []); const onChange = (event: ChangeEvent) => setCurrentMessage(event.target.value); const send = (event: FormEvent) => { event.preventDefault(); wsRef.current!.send(currentMessage); setCurrentMessage(""); setMessages((m) => [{ side: "sent", text: currentMessage }, ...m]); }; return (
{messages.map((message, i) => ( ))}
); } export default App;