diff --git a/examples/hello-world/src/App.tsx b/examples/hello-world/src/App.tsx
index 52a923b..ac455c1 100644
--- a/examples/hello-world/src/App.tsx
+++ b/examples/hello-world/src/App.tsx
@@ -1 +1 @@
-export {default} from './useContext/index2'
+export {default} from './memo'
diff --git a/examples/hello-world/src/memo/index.tsx b/examples/hello-world/src/memo/index.tsx
new file mode 100644
index 0000000..e7c6494
--- /dev/null
+++ b/examples/hello-world/src/memo/index.tsx
@@ -0,0 +1,27 @@
+import {useState, memo} from 'react'
+
+export default function App() {
+ const [num, update] = useState(0)
+ console.log('App render ', num)
+ return (
+
update(num + 1)}>
+
+
+
+ )
+}
+
+const Cpn = memo(function ({num, name}) {
+ console.log('render ', name)
+ return (
+
+ {name}: {num}
+
+
+ )
+})
+
+function Child() {
+ console.log('Child render')
+ return i am child
+}
diff --git a/packages/react-reconciler/src/begin_work.rs b/packages/react-reconciler/src/begin_work.rs
index bce4278..fac3c81 100644
--- a/packages/react-reconciler/src/begin_work.rs
+++ b/packages/react-reconciler/src/begin_work.rs
@@ -1,10 +1,10 @@
use std::cell::RefCell;
use std::rc::Rc;
-use wasm_bindgen::JsValue;
+use wasm_bindgen::{JsCast, JsValue};
-use shared::{derive_from_js_value, is_dev, log};
-use web_sys::js_sys::Object;
+use shared::{derive_from_js_value, is_dev, log, shallow_equal};
+use web_sys::js_sys::{Function, Object};
use crate::child_fiber::{clone_child_fiblers, mount_child_fibers, reconcile_child_fibers};
use crate::fiber::{FiberNode, MemoizedState};
@@ -118,11 +118,51 @@ pub fn begin_work(
WorkTag::HostText => Ok(None),
WorkTag::ContextProvider => Ok(update_context_provider(
work_in_progress.clone(),
- render_lane,
+ render_lane.clone(),
)),
+ WorkTag::MemoComponent => update_memo_component(work_in_progress.clone(), render_lane),
};
}
+fn update_memo_component(
+ work_in_progress: Rc>,
+ render_lane: Lane,
+) -> Result