Implement react-hooks-sse library

This commit is contained in:
2022-02-15 18:34:10 +02:00
parent 4c77fb127d
commit 2977247193
7 changed files with 62 additions and 36 deletions

View File

@@ -1,28 +1,29 @@
import React, { useState } from 'react';
import React, { useState, useEffect } from 'react';
import { useSSE, SSEProvider, createCustomSource } from 'react-hooks-sse';
import './App.css';
import EventList from '../eventList/EventList.js';
function App(props) {
const [events, setEvents] = useState(['EventLog']); // initialises Event state
const [sse, setSse] = useState(new EventSource('/events', { withCredentials: true })) // creates eventSource listener in state
function SSE() {
const state = useSSE('events');
const [events, setEvents] = useState([]); // initialises Event state
sse.onerror = (e) => {
console.error();
sse.close();
}
useEffect(() => {
console.log('render');
if (state) {
setEvents([JSON.parse(state.data), ...events]);
}
}, [state])
sse.onmessage = (e) => {
// parses received data from string to JSON
const message = JSON.parse(e.data);
return events;
}
// initialises a new array with updated server-side event array
const newEvents = [...message, ...events];
function App() {
// sets the updated event array as state
setEvents(newEvents);
};
return <EventList data={events} />
return (
<SSEProvider endpoint="/events">
<SSE/>
</SSEProvider>
)
}

View File

@@ -3,15 +3,13 @@ import Event from '../event/Event.js';
import './EventList.css';
function EventList(props) {
console.log(`FROM LIST: ${props.data}`);
return (
<ul className="eventListUl">
{props.data.map((event) => {
return <li className="eventListLi"><Event data={event} /></li>
})}
</ul>
)
return ;
// <ul className="eventListUl">
// {props.data.map((event) => {
// return <li className="eventListLi"><Event data={event} /></li>
// })}
// </ul>
}