Wait for the suspense boundary above the router to resolve before sending the first streaming chunk (#3891)
* Change the suspense streaming context after suspense is resolved in the router * Wait for the suspense context before streaming the first chunk in ssr * forward more response parts * warn * extract the hydration format into a crate * Fix hydration when no data is sent * forward web and server features * Fix suspense that starts on the client * fix use_server_future on the client * Add documentation for fullstack hooks and protocol * downgrade rust edition * fix clippy * fix tests * fix clippy * Fix pure web compile * undo changes to the fullstack router example * fix formatting
This commit is contained in:
1 parent
4f74ef81d1
commit
84221f55a0
45 files changed
+988
-533
No files matched your search
@@ -95,3 +95,6 @@ pub use use_signal::*;
|
||||
|
||||
mod use_set_compare;
|
||||
pub use use_set_compare::*;
|
||||
|
||||
mod use_after_suspense_resolved;
|
||||
pub use use_after_suspense_resolved::*;
|
||||
@@ -0,0 +1,20 @@
|
||||
use dioxus_core::{prelude::suspense_context, use_hook};
|
||||
|
||||
/// Run a closure after the suspense boundary this is under is resolved. The
|
||||
/// closure will be run immediately if the suspense boundary is already resolved
|
||||
/// or the scope is not under a suspense boundary.
|
||||
pub fn use_after_suspense_resolved(suspense_resolved: impl FnOnce() + 'static) {
|
||||
use_hook(|| {
|
||||
// If this is under a suspense boundary, we need to check if it is resolved
|
||||
match suspense_context() {
|
||||
Some(context) => {
|
||||
// If it is suspended, run the closure after the suspense is resolved
|
||||
context.after_suspense_resolved(suspense_resolved)
|
||||
}
|
||||
None => {
|
||||
// Otherwise, just run the resolved closure immediately
|
||||
suspense_resolved();
|
||||
}
|
||||
}
|
||||
})
|
||||
}
|
||||
Reference in new issue
Block a user