1
0
Эх сурвалжийг харах

Fix hydration for static text nodes at the root of the template (#2184)

* Fix hydration for static text nodes at the root of the template

* fix clippy
Evan Almloff 1 жил өмнө
parent
commit
6a781af693

+ 1 - 0
.gitignore

@@ -1,3 +1,4 @@
+.dioxus
 /target
 /target
 /packages/playwright-tests/web/dist
 /packages/playwright-tests/web/dist
 /packages/playwright-tests/fullstack/dist
 /packages/playwright-tests/fullstack/dist

+ 9 - 0
packages/ssr/src/cache.rs

@@ -156,11 +156,20 @@ impl StringCache {
                 cur_path.pop();
                 cur_path.pop();
             }
             }
             TemplateNode::Text { text } => {
             TemplateNode::Text { text } => {
+                // write the id if we are prerendering and this is a root node that may need to be removed in the future
+                if prerender && is_root {
+                    write!(chain, "<!--node-id")?;
+                    chain.segments.push(Segment::RootNodeMarker);
+                    write!(chain, "-->")?;
+                }
                 write!(
                 write!(
                     chain,
                     chain,
                     "{}",
                     "{}",
                     askama_escape::escape(text, askama_escape::Html)
                     askama_escape::escape(text, askama_escape::Html)
                 )?;
                 )?;
+                if prerender && is_root {
+                    write!(chain, "<!--#-->")?;
+                }
             }
             }
             TemplateNode::Dynamic { id: idx } | TemplateNode::DynamicText { id: idx } => {
             TemplateNode::Dynamic { id: idx } | TemplateNode::DynamicText { id: idx } => {
                 chain.segments.push(Segment::Node(*idx))
                 chain.segments.push(Segment::Node(*idx))

+ 5 - 1
packages/web/src/rehydrate.rs

@@ -113,7 +113,11 @@ impl WebsysDom {
                     ids,
                     ids,
                     to_mount,
                     to_mount,
                 )?,
                 )?,
-            _ => {}
+            TemplateNode::Text { .. } => {
+                if let Some(id) = root_id {
+                    ids.push(id.0 as u32);
+                }
+            }
         }
         }
         Ok(())
         Ok(())
     }
     }