use queue_events instead of process_events to fix ssr issue (#4772)
* use `queue_events` instead of `process_events` to fix ssr issue * remove suspense wait from liveview
This commit is contained in:
1 parent
01db142750
commit
76319005b8
3 files changed
+3
-11
No files matched your search
@@ -640,6 +640,8 @@ impl VirtualDom {
|
|||||||
#[instrument(skip(self), level = "trace", name = "VirtualDom::wait_for_suspense")]
|
#[instrument(skip(self), level = "trace", name = "VirtualDom::wait_for_suspense")]
|
||||||
pub async fn wait_for_suspense(&mut self) {
|
pub async fn wait_for_suspense(&mut self) {
|
||||||
loop {
|
loop {
|
||||||
|
self.queue_events();
|
||||||
|
|
||||||
if !self.suspended_tasks_remaining() && !self.has_dirty_scopes() {
|
if !self.suspended_tasks_remaining() && !self.has_dirty_scopes() {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -208,10 +208,6 @@ impl SsrRendererPool {
|
|||||||
// rebuild the virtual dom
|
// rebuild the virtual dom
|
||||||
virtual_dom.rebuild_in_place();
|
virtual_dom.rebuild_in_place();
|
||||||
|
|
||||||
// Process any pending events that might have been triggered during the rebuild
|
|
||||||
// This ensures things like error boundaries get a chance to run.
|
|
||||||
virtual_dom.process_events();
|
|
||||||
|
|
||||||
// If streaming is disabled, wait for the virtual dom to finish all suspense work
|
// If streaming is disabled, wait for the virtual dom to finish all suspense work
|
||||||
// before rendering anything
|
// before rendering anything
|
||||||
if streaming_mode == StreamingMode::Disabled {
|
if streaming_mode == StreamingMode::Disabled {
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ use dioxus_html::{EventData, HtmlEvent, PlatformEventData};
|
|||||||
use dioxus_interpreter_js::MutationState;
|
use dioxus_interpreter_js::MutationState;
|
||||||
use futures_util::{pin_mut, SinkExt, StreamExt};
|
use futures_util::{pin_mut, SinkExt, StreamExt};
|
||||||
use serde::Serialize;
|
use serde::Serialize;
|
||||||
use std::{any::Any, rc::Rc, time::Duration};
|
use std::{any::Any, rc::Rc};
|
||||||
use tokio_util::task::LocalPoolHandle;
|
use tokio_util::task::LocalPoolHandle;
|
||||||
|
|
||||||
#[derive(Clone)]
|
#[derive(Clone)]
|
||||||
@@ -238,12 +238,6 @@ pub async fn run(mut vdom: VirtualDom, ws: impl LiveViewSocket) -> Result<(), Li
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// wait for suspense to resolve in a 10ms window
|
|
||||||
tokio::select! {
|
|
||||||
_ = tokio::time::sleep(Duration::from_millis(10)) => {}
|
|
||||||
_ = vdom.wait_for_suspense() => {}
|
|
||||||
}
|
|
||||||
|
|
||||||
// render the vdom
|
// render the vdom
|
||||||
vdom.render_immediate(&mut mutations);
|
vdom.render_immediate(&mut mutations);
|
||||||
|
|
||||||
|
|||||||
Reference in new issue
Block a user