Skip to content

Commit debc5bb

Browse files
authored
Prepend hydrate event when connecting (#4929)
* Prepend hydrate event when connecting Avoid backend on_mount events triggering a `reload` message, which ends up requeuing hydrate event. * Use .shift instead of .pop * processEvent takes care of socket not being connected
1 parent 60ac361 commit debc5bb

File tree

1 file changed

+12
-6
lines changed

1 file changed

+12
-6
lines changed

reflex/.templates/web/utils/state.js

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -352,8 +352,13 @@ export const applyRestEvent = async (event, socket) => {
352352
* Queue events to be processed and trigger processing of queue.
353353
* @param events Array of events to queue.
354354
* @param socket The socket object to send the event on.
355+
* @param prepend Whether to place the events at the beginning of the queue.
355356
*/
356-
export const queueEvents = async (events, socket) => {
357+
export const queueEvents = async (events, socket, prepend) => {
358+
if (prepend) {
359+
// Drain the existing queue and place it after the given events.
360+
events = [...events, ...Array.from({length: event_queue.length}).map(() => event_queue.shift())];
361+
}
357362
event_queue.push(...events);
358363
await processEvent(socket.current);
359364
};
@@ -477,7 +482,7 @@ export const connect = async (
477482
});
478483
socket.current.on("reload", async (event) => {
479484
event_processing = false;
480-
queueEvents([...initialEvents(), event], socket);
485+
queueEvents([...initialEvents(), event], socket, true);
481486
});
482487

483488
document.addEventListener("visibilitychange", checkVisibility);
@@ -773,16 +778,17 @@ export const useEventLoop = (
773778
const sentHydrate = useRef(false); // Avoid double-hydrate due to React strict-mode
774779
useEffect(() => {
775780
if (router.isReady && !sentHydrate.current) {
776-
const events = initial_events();
777-
addEvents(
778-
events.map((e) => ({
781+
queueEvents(
782+
initial_events().map((e) => ({
779783
...e,
780784
router_data: (({ pathname, query, asPath }) => ({
781785
pathname,
782786
query,
783787
asPath,
784788
}))(router),
785-
}))
789+
})),
790+
socket,
791+
true,
786792
);
787793
sentHydrate.current = true;
788794
}

0 commit comments

Comments
 (0)