注:所有示例使用各框架的官方repl
或者codesandbox
编辑,如果无法打开请考虑科学上网
细粒度更新实现
Svelte
示例的基础组件
Svelte
示例,count
可变化的基础组件
Vue3
示例,count
可变化的基础组件
Vue3
模版编译
我们有个更新很耗时的大列表,让我们看看同步更新和异步更新时,输入框的响应速度
可以从 Demo 看到,当牺牲了列表的更新速度,React
大幅提高了输入响应速度,使交互更自然。
count
默认为 0,每次点击按钮count++
列表中 3 个li
的值分别为 1,2,3 乘以count
的结果
count
默认为 0,每次点击按钮count = count + 1
,观察使用并发特性
(useTransition)后开启的并发更新
count
默认为 0,每次点击按钮count = count + 1
本书推荐方式和官方方式
运行本书推荐方式
对应项目,使用src/demo/RenderPhaseDemo.tsx
调试render阶段
工作流程
自制ReactDOM Renderer
运行本书推荐方式
对应项目,使用src/demo/CommitPhaseDemo.tsx
调试commit阶段
工作流程
Suspense
在新旧版本行为的区别
官方讨论见Behavioral changes to Suspense in React 18 #7
改变示例中的CREATE_ROOT
常量,打开控制台,审查元素,对比是否开启并发更新带来的区别
运行本书推荐方式
对应项目,使用src/demo/ErrorCatchDemo.tsx
调试错误处理
工作流程
Scheduler
实现调度流程,提供两种使用方式:
-
运行
本书推荐方式
对应项目,使用src/demo/MiniSchedulePhase
调试
点击Demo
中的CLICK ME
,观察请求途中数字是否能继续变化
老模型下有 bug 版本的地址 新模型下没 bug 版本的地址
即使在未开启并发特性时,触发更新后也无法立刻获取更新后的值
Batched Updates
用三款框架实现Batched Updates
,打印结果不同:
事件系统
简易实现,提供 2 种使用方式:
-
运行
本书推荐方式
对应项目,使用src/demo/MiniEventSystem
调试
性能优化示例:在线 Demo 地址
Context
面对bailout策略
的示例:在线 Demo 地址
-
运行
本书推荐方式
对应项目,使用src/demo/MiniDiff
调试
-
运行
本书推荐方式
对应项目,使用src/demo/SuspenseDemo/demo2.tsx
调试
-
运行
本书推荐方式
对应项目,使用src/demo/MiniUseState/index.ts
调试
-
运行
本书推荐方式
对应项目,使用src/demo/TransitionDemo/demo1.tsx
调试
-
运行
本书推荐方式
对应项目,使用src/demo/TransitionDemo/demo2.tsx
调试
-
运行
本书推荐方式
对应项目,使用src/demo/TransitionDemo/demo3.tsx
调试
-
运行
本书推荐方式
对应项目,切换分支到use-error-boundary
调试,在Comparing changes中查看改动的代码