Taro 升级 React 18 #11610
AdvancedCat
started this conversation in
RFC
Taro 升级 React 18
#11610
Replies: 2 comments 1 reply
-
RN目前不支持 18,需要等官方支持方案出来 |
Beta Was this translation helpful? Give feedback.
0 replies
-
添加配置项是否启用 react 18 Concurrent Mode,可供参考的技术:vercel/next.js#10645 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
背景
随着React v18的正式发布,目前可以正式在项目中使用新版本React特性,Taro计划实现React18版本升级。
新特性调研
Automatic Batching
自动合并更新在多次触发更新时,可以提升React渲染性能。React18将自动合并扩展至生命周期函数、合成事件、原生事件、定时器回调中。自动合并是在 react-reconciler 中完成的,Taro中完整复用了react-reconciler,Taro无需关心。
Transitions
React将更新分为 urgent 与 non-urgent 两类,将 non-urgent update 定义为 “transitions” ,可以调用 startTransition 或 useTransition 指定哪些更新是 “transitions”。non-urgent可中断,React会丢弃陈旧的更新,而渲染最新的更新。
同样的,transitions的更新调度是在 react-reconciler 中完成的,Taro无需关心。
New Suspense
Suspense提供了“UI loading state”的中间状态,减少白屏时间。通常需要与 React.lazy 配合使用。Taro H5可以正常使用Suspense,在小程序环境,由于需要将业务整体打包,暂无法使用Suspense.
New Client API
新的客户端api是使用上列新特性的开关,当用户调用 createRoot 时,默认使用v18提供的新特性。v18允许同一个应用中存在多个React实例,互不影响。
本次Taro将重点支持 New Client API
New Server API
Taro暂不支持服务端渲染特性。
Strict Mode
在开发模式下,
<StrictMode>
提供更好的开发提示。升级React v18即可New Hooks
升级React v18即可
详细设计
依赖包升级
Taro运行时使用 New Client API
需要对两个运行时包
@tarojs/react
、@tarojs/plugin-framework-react
进行修改1、@tarojs/react
reconciler.ts
hostConfig 新增方法 getCurrentEventPriority()
hostConfig 新增方法 detachDeletedInstance()
render.ts
新增createRoot方法
修改类Root的构造函数,允许传入 isConcurrentRoot变量,判断是否开启“New Client API”
2、@tarojs/plugin-framework-react
connect.ts
修改调用ReactDOM.render 的方式,根据实际用户安装的react版本号来决定调用哪种Client API
同时,由于 root.render 不再返回根组件AppWrapper实例,改由AppWrapper构造函数中赋值
启用react18新特性
本次更新提供了配置项,允许用户自由选择react的工作模式,目前默认
legacy
模式,如需要在react18下启用concurrent
,则需要在插件@tarojs/plugin-framework-react
中配置参数reactMode
:Taro React 样板仓库升级至v18
TODO
分支
feat/react18
测试
通过以下操作可试用React18
缺陷
待确认
Beta Was this translation helpful? Give feedback.
All reactions