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;