switch to a Document trait and introduce Script/Head/Style/Meta components (#2635)
* switch to a Document trait and introduce Script/Head/Style/Meta components * Fix desktop title * Insert special elements into the head during the inital SSR render * Make all head component attributes optional * hydrate head elements * improve the server streaming head warning * Document fullstack head hydration approach * deduplicate head elements by href * move Link into head::Link * document head components * add meta and title examples * Fix a few doc examples * fix formatting * Add title to playwright tests * serde is optional on web, but it is enabled by hydrate * remove leftover console log
This commit is contained in:
1 parent
a490a94ae5
commit
176e67e5b7
65 files changed
+1703
-495
No files matched your search
@@ -22,27 +22,29 @@ use serde::{de::DeserializeOwned, Serialize};
|
||||
/// ```
|
||||
pub fn use_server_cached<O: 'static + Clone + Serialize + DeserializeOwned>(
|
||||
server_fn: impl Fn() -> O,
|
||||
) -> O {
|
||||
use_hook(|| server_cached(server_fn))
|
||||
}
|
||||
|
||||
pub(crate) fn server_cached<O: 'static + Clone + Serialize + DeserializeOwned>(
|
||||
value: impl FnOnce() -> O,
|
||||
) -> O {
|
||||
#[cfg(feature = "server")]
|
||||
{
|
||||
let serialize = crate::html_storage::use_serialize_context();
|
||||
use_hook(|| {
|
||||
let data = server_fn();
|
||||
serialize.push(&data);
|
||||
data
|
||||
})
|
||||
let serialize = crate::html_storage::serialize_context();
|
||||
let data = value();
|
||||
serialize.push(&data);
|
||||
data
|
||||
}
|
||||
#[cfg(all(not(feature = "server"), feature = "web"))]
|
||||
{
|
||||
use_hook(|| {
|
||||
dioxus_web::take_server_data()
|
||||
.ok()
|
||||
.flatten()
|
||||
.unwrap_or_else(server_fn)
|
||||
})
|
||||
dioxus_web::take_server_data()
|
||||
.ok()
|
||||
.flatten()
|
||||
.unwrap_or_else(value)
|
||||
}
|
||||
#[cfg(not(any(feature = "server", feature = "web")))]
|
||||
{
|
||||
use_hook(server_fn)
|
||||
value()
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user