序号 标题 变更详情 变更来源版本 变更对开发者的影响 影响场景 参考文档
1 ScrollViewShadowNode的getContentOriginOffset增加入参:includeTransform 对getContentOriginOffset增加入参,修复反转的flatlist无法滚动的问题 0.74.0-rc4 修复反转的flatlist无法滚动的问题.
对于开发者而言,如果自行对ScrollView进行适配并调用getContentOriginOffset,需要添加一个布尔值:includeTransform,判断是否考虑style中设置的transform
开发态:自定义ScrollView组件代码是否能正常编译
运行态:反转后的flatlist能正常滑动
https://github.com/facebook/react-native/pull/44822
2 TochableHighlight无法作为TouchableHighlight类引用 修正对于TouchableHighlight能作为TouchableHighlight进行useRef的引用,变为只能React.ElementRef或View引用 0.75.0 TouchabelHighLigfht在使用ref进行引用的时候应该作为View被引用,但是却被作为TouchableHighlight引用。
TouchableHighlight无法再被作为值或者类型引用:
如下用法会有报错:
tsx<br>import {TouchableHighlight} from 'react-native';<br>const ref = useRef<TouchableHighlight>();<br>// ^^^ TS2749: TouchableHighlight refers to a value, but is being used as a type here.<br>// Did you mean typeof TouchableHighlight?<br>
推荐解决方案 使用内置的RN类型 React.ElementRef
diff<br>-const ref = useRef<TouchableHighlight>();<br>+const ref = useRef<React.ElementRef<typeof TouchableHighlight>>();<br>
还可以用View作为类而不是TouchableHighlight
diff<br>-const ref = useRef<TouchableHighlight>();<br>+const ref = useRef<View>();<br>TouchabelHighLigfht在使用ref进行引用的时候应该作为View被引用,但是却被作为TouchableHighlight引用。
TouchableHighlight无法再被作为值或者类型引用:
如下用法会有报错:
tsx<br>import {TouchableHighlight} from 'react-native';<br>const ref = useRef<TouchableHighlight>();<br>// ^^^ TS2749: TouchableHighlight refers to a value, but is being used as a type here.<br>// Did you mean typeof TouchableHighlight?<br>
推荐解决方案 使用内置的RN类型 React.ElementRef
diff<br>-const ref = useRef<TouchableHighlight>();<br>+const ref = useRef<React.ElementRef<typeof TouchableHighlight>>();<br>
还可以用View作为类而不是TouchableHighlight
diff<br>-const ref = useRef<TouchableHighlight>();<br>+const ref = useRef<View>();<br>
开发态&运行态:
在前端代码中对TouchableHighlight使用useRef的场景
https://github.com/facebook/react-native/pull/44038
3 对于NativeModule中使用codegen方法时的传入参数做出更加严格的入参检查 在NativeModule中,如果使用了一个codegen的方法定义为:someMethod(value?: number): void;实际使用时传入null:NativeModule.someMethod(null);在修改之前不会报错,在修改之后会有报错。 0.75.0 在涉及原生的TurboModule中,是否在不接受传入null的codegen函数中直接传入null值 开发态:需要对TurboModule中是否接受null值做补充
运行态:在不接受null值的函数中传入null会导致运行报错。
https://github.com/facebook/react-native/commit/67b9628af588e8fc778d732fc387dbd48acf705e
4 重命名js错误处理方法类型 C++侧JsErrorHandler::JsErrorHandlingFunc类型更名为JsErrorHandler::OnJsError 0.75.0 原来在RNInstance等类中提供 JsErrorHandler::JsErrorHandlingFunc 类型回调函数的地方,需要改为 JsErrorHandler::OnJsError 类型 开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/43985
5 ReactPrimitives中删除没用的include 从ReactPrimitives.h中删除了 include folly/dynamic.h和memory 0.75.0 可能导致include了ReactPrimitives.h的c++代码找不到 folly/dynamic 或 memory 中定义的函数,只要通过了编译就不存在这个问题。如果构建失败需要在失败的文件中include相应的定义
开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/43806
6 部分可见元素可以作为列表锚点 旧实现只有完全展示的元素才能作为列表锚点,变更后部分可见的元素就可以作为列表锚点 0.75.0 变更的目的是避免加载指示器等在列表中完全展示但位置/显隐状态不稳定的元素被选为锚点后导致列表展示不稳定。建议开发者测试列表加载新元素场景,确认列表行为仍符合预期。 开发态:不影响
运行态:列表加载新元素
https://github.com/facebook/react-native/pull/43203
7 SyncCallback禁止拷贝 SyncCallback禁止拷贝,新增了允许move 0.75.0 复制 SyncCallback 对象的代码无法通过编译,如果只需要一个callback对象可以改为move,如果需要多个callback需要创建多个。注意 SyncCallback 只能在独占js引擎上下文时执行 开发态:编译失败
运行态:错误的可能导致崩溃
https://github.com/facebook/react-native/pull/43268
8 组件onLayout事件优先级降低 将组件onLayout时间的优先级由可配置异步批量/异步不批量改为固定异步批量 0.74.0 onLayout事件及时性变差,依赖这一回调进行动画或布局调整的场景,动作的时机可能受到影响。此外应注意onLayout和临近生命周期函数,如componentDidUpdate ,间的执行顺序。 开发态:无影响
运行态:影响onLayout的及时性及其与临近生命周期函数的执行顺序
https://github.com/facebook/react-native/pull/42631
9 Animation的__onEnd不再暴露给子类 子类应使用__debouncedOnEnd代替 0.77.0-rc.0 编译不通过 开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/46271
10 enableOptimisedVirtualizedCells标志位被移除。 enableOptimisedVirtualizedCells标志位从代码层面被移除,默认效果由false变更为true 0.77.0-rc.0 编译不通过 开发态:编译失败
运行态:性能优化
https://github.com/facebook/react-native/pull/47724
11 concurrentRoot启动项被移除 ConcurrentRoot不再用于决定是否以并发模式运行应用程序 0.77.0-rc.0 编译不通过 开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/47512
12 移除了NativeMethods的与refs相关的配置 字符串refs被废弃,所以移除了NativeMethods的相关配置 0.77.0-rc.0 编译不通过 开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/46734
13 移除 @react-native-community/cli 的直接依赖 移除 @react-native-community/cli 的直接依赖 0.76.0-rc.1 打包失败 开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/45927
14 移除@react-native-community的直接依赖 移除@react-native-community的直接依赖 0.76.0-rc.0 打包失败 开发态:编译失败
运行态:不影响
https://github.com/facebook/react-native/pull/44928
15 渲染相关的三个特性flag默认值改为开启 渲染相关的三个特性flag默认值改为开启,开启后可打断渲染循环响应JS事件 0.74.1-rc0 编译不通过 开发态:编译失败
运行态:性能优化
https://github.com/facebook/react-native/pull/43396
16 不再将某些三方库的Flow类型定义文件,作为“react native”包的一部分发布 将flow-typed/目录从pacakge/react-native/flow-typed/移到社区仓库的目录 0.73.0 react-native不再包含部分三方库的Flow语法定义,因此开发者引用这部分依赖时要使用新的路径去依赖 开发态:打JSbundle失败报错
运行态:Metro调试运行可能红屏报错
https://github.com/facebook/react-native/pull/37636
17 ts更严格的检查style中transform的语法格式 <View style={{transform: [{scale: 1, translateX: 1}]}}>这样的写法在0.73.0后续使用会报错 0.73.0 开发者使用<View style={{ transform: [{ scale: 1, translateX: 1 }] }} /> 这样的写法会报错 开发态:打JSbundle失败报错
运行态:Metro调试运行可能红屏报错
https://github.com/facebook/react-native/pull/38348
18 移除YOGA中枚举值YGExperimentalFeatureFixAbsoluteTrailingColumnMargin,社区去除了fix-absolute-trailing-column-margin这个CSS属性 移除YOGA中枚举值YGExperimentalFeatureFixAbsoluteTrailingColumnMargin,社区去除了fix-absolute-trailing-column-margin这个CSS属性 0.73.0 开发者使用YGExperimentalFeature的YGExperimentalFeatureFixAbsoluteTrailingColumnMargin这个被删除枚举值会编译报错,fix-absolute-trailing-column-margin这个CSS属性的移除可能导致布局组件布局发生变化 开发态:编译失败 运行态:影响组件布局 https://github.com/facebook/react-native/pull/37374
19 so列表发生变化 so列表发生变化,是否影响开发者Cmakelist中集成so的配置 0.76.0 编译不通过 编译 目前0.77版本release包尚未构建,文档待方案确定后给出
20 jsx文件中字典类型参数传逗号分隔的多个字典打bundle报错 jsx 文件中类似 style={{key1: value1}, {key2: value2}} 的写法,使用 0.76.0 及以上的 @react-native/bable-preset 配置时打包会报错。这种写法不是合法的tsx,即使老版本上没有构建报错也只有最后一个字典实际生效。 0.76.0 打js bundle时报错 开发态:打包失败 运行态:不影响 https://github.com/facebook/react-native/pull/46696
21 移除 butter 组件 移除了 ReactCommon 中的 butter 组件,cpp代码中butter namespace下所有符号不再可用,可以参考 butter 实现进行替换 0.73.0 编译报错 开发态:编译失败 运行态:不影响 https://github.com/facebook/react-native/pull/39494
22 View Manager定义不再支持tsx文件类型 @react-native/babel-preset 中添加 @react-native/babel-plugin-codegen 插件后会校验View Manager定义的文件类型,只支持ts,不支持tsx 0.73.0 打js bundle时报错,报错消息类似 error xx.tsx: xx.tsx: Unable to parse file 'xx.tsx'. Unsupported filename extension. 开发态:打包失败 运行态:不影响 https://github.com/facebook/react-native/pull/38227