diff --git a/examples/hello-world/src/App.tsx b/examples/hello-world/src/App.tsx
index 3a7c6a3..862ad52 100644
--- a/examples/hello-world/src/App.tsx
+++ b/examples/hello-world/src/App.tsx
@@ -1,13 +1,20 @@
import {useState} from 'react'
+let n = 0
+
function App() {
- const [name, setName] = useState(() => 'ayou')
- setTimeout(() => {
- setName('ayouayou')
- }, 1000)
- return (
-
{name}
- )
+ const [name, setName] = useState(() => false)
+ const [age, setAge] = useState(() => 10)
+ if (n === 0) {
+ let tid = setTimeout(() => {
+ n++
+ setName(true)
+ setAge(11)
+ clearTimeout((tid))
+ }, 1000)
+ }
+
+ return name ? {name + age} : 'N/A'
}
function Comp({children}) {
diff --git a/examples/hello-world/src/main.tsx b/examples/hello-world/src/main.tsx
index 8f70611..4f2a33c 100644
--- a/examples/hello-world/src/main.tsx
+++ b/examples/hello-world/src/main.tsx
@@ -2,5 +2,7 @@ import {createRoot} from 'react-dom'
import App from './App.tsx'
const root = createRoot(document.getElementById("root"))
+const a =
+console.log(a)
root.render()
diff --git a/package.json b/package.json
index 01f35de..97d46ca 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"scripts": {
"build": "node scripts/build.js",
"build:test": "node scripts/build.js --test",
- "test": "jest"
+ "test": "npm run build:test && jest"
},
"author": "",
"license": "ISC",
diff --git a/packages/react-dom/src/host_config.rs b/packages/react-dom/src/host_config.rs
index 42a276c..a55ec95 100644
--- a/packages/react-dom/src/host_config.rs
+++ b/packages/react-dom/src/host_config.rs
@@ -1,7 +1,7 @@
use std::any::Any;
use std::rc::Rc;
-use web_sys::{window, Node};
+use web_sys::{Node, window};
use react_reconciler::HostConfig;
use shared::log;
@@ -38,4 +38,20 @@ impl HostConfig for ReactDomHostConfig {
fn append_child_to_container(&self, child: Rc, parent: Rc) {
self.append_initial_child(parent, child)
}
+
+ fn remove_child(&self, child: Rc, container: Rc) {
+ let p = container.clone().downcast::().unwrap();
+ let c = child.clone().downcast::().unwrap();
+ match p.remove_child(&c) {
+ Ok(_) => {
+ log!("remove_child successfully {:?} {:?}", p, c);
+ }
+ Err(_) => todo!(),
+ }
+ }
+
+ fn commit_text_update(&self, text_instance: Rc, content: String) {
+ let text_instance = text_instance.clone().downcast::().unwrap();
+ text_instance.set_node_value(Some(content.as_str()));
+ }
}
diff --git a/packages/react-dom/src/renderer.rs b/packages/react-dom/src/renderer.rs
index 9cf8982..a79090c 100644
--- a/packages/react-dom/src/renderer.rs
+++ b/packages/react-dom/src/renderer.rs
@@ -23,6 +23,6 @@ impl Renderer {
impl Renderer {
pub fn render(&self, element: &JsValue) -> JsValue {
self.reconciler
- .update_container(Rc::new(element.clone()), self.root.clone())
+ .update_container(element.clone(), self.root.clone())
}
}
diff --git a/packages/react-reconciler/src/begin_work.rs b/packages/react-reconciler/src/begin_work.rs
index f52c61e..f865a2c 100644
--- a/packages/react-reconciler/src/begin_work.rs
+++ b/packages/react-reconciler/src/begin_work.rs
@@ -26,17 +26,32 @@ pub fn begin_work(
fn update_function_component(
work_in_progress: Rc>,
) -> Result