菜单

视图组件

相关源文件

View组件是React Native中用户界面的基本构建块。它是一个支持Flexbox布局、样式、触摸处理和可访问性功能的容器。本文档将介绍核心的View组件、它的属性、样式能力以及跨平台的实现细节。

有关ScrollView和其他专用视图容器的信息,请参阅ScrollView和列表。有关视图的动画功能,请参阅动画系统

核心View组件

View组件是React Native中最基本的UI构建块。它等同于Web开发中的div、iOS中的UIView以及Android中的android.view。View设计用于嵌套在其他View中,并且可以包含任意数量的子组件。

基本实现

View组件实现为一个平台特定原生组件的包装器。当您在JavaScript代码中使用View时,React Native会在底层平台创建一个相应的原生视图。

View的JavaScript实现定义在packages/react-native/Libraries/Components/View/View.js 它是一个简单的React组件,它会将props转发给原生组件实现。

来源

View 属性

View组件接受广泛的属性来控制它们的显示、行为和布局。这些属性可以分为几类:

布局属性

布局属性控制视图如何定位自身及其子项。React Native使用基于Flexbox的布局系统,类似于Web上的CSS,但有一些区别。

关键布局属性包括:

属性类型描述
flex数字填充空间的相对数量
flexDirection字符串子项布局方向(“row”,“column”等)
justifyContent字符串沿主轴的对齐方式
alignItems字符串沿交叉轴的对齐方式
widthnumber|string组件的宽度
heightnumber|string组件的高度
position字符串定位方法(“absolute”,“relative”,“static”)
padding*number|string组件边框内的空间
margin*number|string组件边框外的空间

来源

样式属性

样式属性控制视图在其布局之外的视觉外观。

属性类型描述
backgroundColorcolor背景颜色
borderWidth数字边框的宽度
borderColorcolor边框的颜色
borderRadius数字圆角半径
opacity数字透明度(0-1)
shadowColorcolor阴影颜色(iOS)
elevation数字投影效果(Android)
transformarray变换数组
zIndex数字控制视图的层叠顺序

来源

事件处理属性

View组件可以响应各种触摸和交互事件。

属性描述
onPress当视图被按下时调用
onLongPress长按手势后调用
onPressIn按下手势开始时调用
onPressOut按下手势结束时调用
onTouchStart触摸开始时调用
onTouchMove触摸移动时调用
onTouchEnd触摸结束时调用

来源

可访问性属性

View组件还包含支持可访问性功能的属性。

属性描述
accessible指示视图是否为可访问元素
accessibilityLabel屏幕阅读器读取的文本
accessibilityHint屏幕阅读器读取的提示文本
accessibilityRole此元素的角色(例如,“button”,“link”)
accessibilityState组件的当前状态(例如,disabled)

来源

视图的样式系统

React Native提供了专门的StyleSheet API来定义组件样式。React Native中的样式与Web上的CSS样式相似,但使用驼峰式命名。

StyleSheet API用法

样式继承

与Web CSS不同,React Native的样式继承是有限的。大多数样式不会自动从父组件继承到子组件。然而,特定于文本的样式会在Text组件内继承。

来源

内部实现

View的实现涉及JavaScript、C++和特定于平台的代码的多个层。

Shadow Node实现

View组件使用Shadow Node系统,该系统独立于渲染来处理布局计算。

Shadow Node系统:

  1. 从JavaScript接收props
  2. 使用Yoga计算布局
  3. 生成具有计算布局的原生视图

来源

Base View Props

C++实现定义了跨平台使用的基础视图属性。

Base View 属性的关键类别包括:

  • 布局(位置、尺寸)
  • 样式(颜色、透明度)
  • 边框
  • 阴影
  • 变换

来源

平台特定实现

iOS 实现

在iOS上,View组件映射到UIView,并由RCTViewManager管理。

来源

Android 实现

在Android上,View组件映射到各种Android View类,由ViewManager类管理。

来源

高级视图功能

转换

可以使用transform属性来转换视图,该属性接受一个变换对象数组。

来源

动画视图

可以使用Animated API来为视图添加动画。Animated.View组件是View的一个特化版本,可以与动画系统配合使用。

来源

嵌套和 Z-Index

视图可以被嵌套以创建复杂的UI。zIndex 属性控制着重叠视图的堆叠顺序。

来源

专用视图属性

阴影和高程

React Native 为 iOS 和 Android 提供了不同的阴影机制。

显示和可见性

来源

常见用例和示例

基本容器

Flexbox 布局

卡片式 UI 组件

来源

最佳实践

  1. 尽可能保持组件层级扁平,以获得更好的性能。
  2. 使用 StyleSheet.create 以获得更好的运行时性能和类型检查。
  3. 在应用高级样式属性时,请考虑平台差异
  4. 使用 flex: 1 使组件扩展以填充可用空间。
  5. 为大型列表优化设置 removeClippedSubviews={true}
  6. 理解 position: 'absolute' 以用于覆盖和固定定位。
  7. 使用正确的专用组件,而不是仅使用带样式的视图(例如,使用 TouchableOpacity 而不是带点击事件处理器的视图)。

与其他系统集成

视图与其他 React Native 子系统集成。

  1. 手势响应系统:视图可以通过响应系统响应触摸。
  2. 辅助功能:视图支持屏幕阅读器和其他辅助技术。
  3. 动画:可以使用 Animated API 为视图添加动画。
  4. 布局引擎:视图使用 Yoga 进行布局计算。
  5. 样式表系统:视图通过样式表系统获取样式。

来源