diff --git a/examples/hello-world/src/App.tsx b/examples/hello-world/src/App.tsx
index eb18dd9..1808250 100644
--- a/examples/hello-world/src/App.tsx
+++ b/examples/hello-world/src/App.tsx
@@ -1 +1 @@
-export {default} from './lazy'
+export {default} from './useTransition'
diff --git a/examples/hello-world/src/useTransition/AboutTab.tsx b/examples/hello-world/src/useTransition/AboutTab.tsx
new file mode 100644
index 0000000..4b91b29
--- /dev/null
+++ b/examples/hello-world/src/useTransition/AboutTab.tsx
@@ -0,0 +1,3 @@
+export default function AboutTab() {
+ return
Welcome to my profile!
+}
diff --git a/examples/hello-world/src/useTransition/ContactTab.tsx b/examples/hello-world/src/useTransition/ContactTab.tsx
new file mode 100644
index 0000000..b6cad8a
--- /dev/null
+++ b/examples/hello-world/src/useTransition/ContactTab.tsx
@@ -0,0 +1,11 @@
+export default function ContactTab() {
+ return (
+ <>
+ You can find me online here:
+
+ - admin@mysite.com
+ - +123456789
+
+ >
+ )
+}
diff --git a/examples/hello-world/src/useTransition/PostsTab.tsx b/examples/hello-world/src/useTransition/PostsTab.tsx
new file mode 100644
index 0000000..01fca7b
--- /dev/null
+++ b/examples/hello-world/src/useTransition/PostsTab.tsx
@@ -0,0 +1,23 @@
+import {memo} from 'react'
+
+const PostsTab = memo(function PostsTab() {
+ // Log once. The actual slowdown is inside SlowPost.
+ console.log('[ARTIFICIALLY SLOW] Rendering 500 ')
+
+ let items = []
+ for (let i = 0; i < 500; i++) {
+ items.push()
+ }
+ return
+})
+
+function SlowPost({index}) {
+ let startTime = performance.now()
+ while (performance.now() - startTime < 1) {
+ // Do nothing for 1 ms per item to emulate extremely slow code
+ }
+
+ return Post #{index + 1}
+}
+
+export default PostsTab
diff --git a/examples/hello-world/src/useTransition/TabButton.tsx b/examples/hello-world/src/useTransition/TabButton.tsx
new file mode 100644
index 0000000..e546a23
--- /dev/null
+++ b/examples/hello-world/src/useTransition/TabButton.tsx
@@ -0,0 +1,13 @@
+export default function TabButton({children, isActive, onClick}) {
+ if (isActive) {
+ return {children}
+ }
+ return (
+
+ )
+}
diff --git a/examples/hello-world/src/useTransition/index.tsx b/examples/hello-world/src/useTransition/index.tsx
new file mode 100644
index 0000000..a0c5704
--- /dev/null
+++ b/examples/hello-world/src/useTransition/index.tsx
@@ -0,0 +1,37 @@
+import {useState, useTransition} from 'react'
+import TabButton from './TabButton.js'
+import AboutTab from './AboutTab.js'
+import PostsTab from './PostsTab.js'
+import ContactTab from './ContactTab.js'
+import './style.css'
+
+export default function TabContainer() {
+ const [isPending, startTransition] = useTransition()
+ const [tab, setTab] = useState('about')
+
+ function selectTab(nextTab) {
+ startTransition(() => {
+ setTab(nextTab)
+ })
+ }
+
+ return (
+
+
selectTab('about')}>
+ About
+
+
selectTab('posts')}>
+ Posts (slow)
+
+
selectTab('contact')}>
+ Contact
+
+
+ {tab === 'about' &&
}
+ {tab === 'posts' &&
}
+ {tab === 'contact' &&
}
+
+ )
+}
diff --git a/examples/hello-world/src/useTransition/style.css b/examples/hello-world/src/useTransition/style.css
new file mode 100644
index 0000000..7890858
--- /dev/null
+++ b/examples/hello-world/src/useTransition/style.css
@@ -0,0 +1,55 @@
+* {
+ box-sizing: border-box;
+}
+
+body {
+ font-family: sans-serif;
+ margin: 20px;
+ padding: 0;
+}
+
+h1 {
+ margin-top: 0;
+ font-size: 22px;
+}
+
+h2 {
+ margin-top: 0;
+ font-size: 20px;
+}
+
+h3 {
+ margin-top: 0;
+ font-size: 18px;
+}
+
+h4 {
+ margin-top: 0;
+ font-size: 16px;
+}
+
+h5 {
+ margin-top: 0;
+ font-size: 14px;
+}
+
+h6 {
+ margin-top: 0;
+ font-size: 12px;
+}
+
+code {
+ font-size: 1.2em;
+}
+
+ul {
+ padding-inline-start: 20px;
+}
+
+button {
+ margin-right: 10px;
+}
+b {
+ display: inline-block;
+ margin-right: 10px;
+}
diff --git a/packages/react-dom/src/synthetic_event.rs b/packages/react-dom/src/synthetic_event.rs
index fecc212..5b2ffd8 100644
--- a/packages/react-dom/src/synthetic_event.rs
+++ b/packages/react-dom/src/synthetic_event.rs
@@ -81,7 +81,6 @@ fn trigger_event_flow(paths: Vec, se: &Event) {
fn dispatch_event(container: &Element, event_type: String, e: &Event) {
if e.target().is_none() {
- log!("Target is none");
return;
}
diff --git a/packages/react-reconciler/src/begin_work.rs b/packages/react-reconciler/src/begin_work.rs
index 4d32fd0..984fb4d 100644
--- a/packages/react-reconciler/src/begin_work.rs
+++ b/packages/react-reconciler/src/begin_work.rs
@@ -51,7 +51,6 @@ pub fn begin_work(
work_in_progress: Rc>,
render_lane: Lane,
) -> Result