React: Subscribe and publish to subject

React: Subscribe and publish to subject

Install

npm install nats.ws

Demo implementation

import React, { useState, useEffect } from 'react';
import { connect } from 'nats.ws';

export default function WssSubPub() {
    const [natsConnection, setNatsConnection] = useState(null);
    const [messages, setMessages] = useState([]);

    const subjectId = "chat.messages";
    useEffect(() => {
        async function setupNATS() {
            try {
                const nc = await connect({ servers: ["wss://rollingweddingpictures.com"] });
                setNatsConnection(nc);

                const sub = nc.subscribe(subjectId);
                for await (const m of sub) {
                    setMessages(prevMessages => [...prevMessages, new TextDecoder().decode(m.data)]);
                }
            } catch (error) {
                console.error("NATS connection error:", error);
            }
        }

        setupNATS();

        // https://stackoverflow.com/questions/56800694/what-is-the-expected-return-of-useeffect-used-for
        return () => {
            if (natsConnection) {
                natsConnection.close(); // Clean up connection on unmount
            }
        };
    }, []); // Run once on mount

    const sendMessage = () => {
        if (natsConnection) {
            natsConnection.publish(subjectId, new TextEncoder().encode("New message from React!"));
        }
    };

    return (
        <div>
            <button onClick={sendMessage}>Publish: Send NATS Message</button>
            <div>
                <h3>Subscribe: Messages received:</h3>
                <ul>
                    {messages.map((msg, index) => (
                        <li key={index}>{msg}</li>
                    ))}
                </ul>
            </div>
        </div>
    );
}