Skip to content

Commit 1031da2

Browse files
committed
chore: update react example code
1 parent 4823160 commit 1031da2

File tree

1 file changed

+34
-26
lines changed
  • src/pages/[platform]/build-a-backend/data/connect-event-api

1 file changed

+34
-26
lines changed

src/pages/[platform]/build-a-backend/data/connect-event-api/index.mdx

Lines changed: 34 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -41,61 +41,69 @@ Before you begin, you will need:
4141
- Take note of: HTTP endpoint, region, API Key
4242

4343
```tsx title="src/App.tsx"
44-
import type { EventsChannel } from 'aws-amplify/data';
45-
import { useState, useEffect } from 'react';
46-
import { Amplify } from 'aws-amplify';
47-
import { events } from 'aws-amplify/data';
44+
import type { EventsChannel } from "aws-amplify/data";
45+
import { useState, useEffect, useRef } from "react";
46+
import { Amplify } from "aws-amplify";
47+
import { events } from "aws-amplify/data";
4848

4949
Amplify.configure({
5050
API: {
5151
Events: {
5252
endpoint:
53-
'https://abcdefghijklmnopqrstuvwxyz.appsync-api.us-east-1.amazonaws.com/event',
54-
region: 'us-east-1',
55-
defaultAuthMode: 'apiKey',
56-
apiKey: 'da2-abcdefghijklmnopqrstuvwxyz'
57-
}
58-
}
53+
"https://abcdefghijklmnopqrstuvwxyz.appsync-api.us-east-1.amazonaws.com/event",
54+
region: "us-east-1",
55+
defaultAuthMode: "apiKey",
56+
apiKey: "da2-abcdefghijklmnopqrstuvwxyz",
57+
},
58+
},
5959
});
6060

6161
export default function App() {
62-
const [myEvents, setMyEvents] = useState<unknown[]>([]);
62+
const [myEvents, setMyEvents] = useState<unknown[]>([]);
63+
64+
const sub = useRef<ReturnType<EventsChannel["subscribe"]>>(null);
6365

6466
useEffect(() => {
6567
let channel: EventsChannel;
6668

6769
const connectAndSubscribe = async () => {
68-
channel = await events.connect('default/channel');
69-
70-
channel.subscribe({
71-
next: (data) => {
72-
console.log('received', data);
73-
setMyEvents((prev) => [data, ...prev]);
74-
},
75-
error: (err) => console.error('error', err)
76-
});
70+
channel = await events.connect("default/channel");
71+
72+
if (!sub.current) {
73+
sub.current = channel.subscribe({
74+
next: (data) => {
75+
console.log("received", data);
76+
setMyEvents((prev) => [data, ...prev]);
77+
},
78+
error: (err) => console.error("error", err),
79+
});
80+
}
7781
};
7882

7983
connectAndSubscribe();
8084

81-
return () => channel && channel.close();
85+
return () => {
86+
sub.current?.unsubscribe();
87+
sub.current = null;
88+
return channel?.close();
89+
};
8290
}, []);
8391

8492
async function publishEvent() {
8593
// Publish via HTTP POST
86-
await events.post('default/channel', { some: 'data' });
94+
await events.post("default/channel", { some: "data" });
8795

8896
// Alternatively, publish events through the WebSocket channel
89-
const channel = await events.connect('default/channel');
90-
await channel.publish({ some: 'data' });
97+
const channel = await events.connect("default/channel");
98+
await channel.publish({ some: "data" });
9199
}
92100

93101
return (
94102
<>
95103
<button onClick={publishEvent}>Publish Event</button>
96104
<ul>
97-
{myEvents.map((data) => (
98-
<li key={data.id}>{JSON.stringify(data.event)}</li>
105+
{myEvents.map((data, idx) => (
106+
<li key={idx}>{JSON.stringify(data.event, null, 2)}</li>
99107
))}
100108
</ul>
101109
</>

0 commit comments

Comments
 (0)