一个名为的组件SafeAreaView
由react-native、react-navigation、react-native-safe-area-context和react-native-safe-area-view导出。
有什么区别,在哪些情况下我应该使用哪一个?
一个名为的组件SafeAreaView
由react-native、react-navigation、react-native-safe-area-context和react-native-safe-area-view导出。
有什么区别,在哪些情况下我应该使用哪一个?
除了react-native
他们建立在彼此之上的那个。所有其他人都指示您需要将整个应用程序包装在一个SafeAreaProvider
组件中。
我深入研究了源代码,这是我的推论:
React Native 提供的默认实现。应该适用于大多数情况,但不能例如以编程方式提供插入量。
提供详细的、可检索的插图信息和SafeAreaView
.
写在. react-native-safe-area-context
_ SafeAreaProvider
_ 添加属性,例如避免在某些情况下由于布局更新而引起的卡顿。由 React Navigation 团队实现。SafeAreaView
Animated.View
forceInset
为方便起见重新导出SafeAreaView
,并且在功能上是等效的。react-native-safe-area-view
SafeAreaView
from react-native
。它是默认提供的并且可以工作。react-native-safe-area-context
或react-native-safe-area-view
根据您的需要。@react-navigation/native
(v5) / react-navigation
(v4) 或react-native-safe-area-view
. 它可能与 React Navigation 一起工作得更好。两者是等效的,选择一个并始终如一地使用它。我建议添加一个ESLint no-restricted-imports 规则,该规则禁止SafeAreaView
从您选择使用的位置以外的任何其他位置意外导入。
仅允许从 from 导入的示例规则react-navigation
:
'no-restricted-imports': [
'error',
{
paths: [
{
name: 'react-native',
importNames: ['SafeAreaView'],
message: 'Import SafeAreaView from react-navigation instead',
},
{
name: 'react-native-safe-area-context',
importNames: ['SafeAreaView'],
message: 'Import SafeAreaView from react-navigation instead',
},
{
name: 'react-native-safe-area-view',
importNames: ['SafeAreaView'],
message: 'Import SafeAreaView from react-navigation instead',
},
],
},
],
只是补充/更新@Sampo 答案的一些附加信息:
如果您使用的是react-navigation
v5.x,请注意他们不建议使用自己的实现SafeAreaView
,而是使用 react-native-safe-area-context
:
React Native 导出一个 SafeAreaView 组件时,它有一些固有的问题,即如果包含安全区域的屏幕正在动画,它会导致跳动行为。此外,该组件仅支持 iOS 10+,不支持旧 iOS 版本或 Android。我们建议使用 react-native-safe-area-context 库以更可靠的方式处理安全区域。