React Native 的 UI 组件和样式系统提供构建移动应用程序视觉界面的基础模块。本文档将介绍如何使用 React Native 的组件系统,以及如何使用类似于 CSS 的基于 JavaScript 的样式方法来对这些组件进行样式设置。
有关动画的信息,请参阅 动画系统。有关布局计算和 Flexbox 的详细信息,请参阅 布局引擎。
React Native 提供了一套核心 UI 组件,这些组件可以映射到 iOS 和 Android 平台上的原生 UI 元素。这些组件的基础是 View 组件,它类似于 Web 开发中的 div。
来源
React Native 使用一个基于 JavaScript 的样式系统,该系统类似于 CSS,但用 JavaScript 实现。样式使用 StyleSheet.create() 方法定义,并作为 props 应用于组件。
来源
在 React Native 中,样式定义为 JavaScript 对象,其属性使用 camelCase,类似于 CSS,但不完全相同。这些样式可以直接应用于组件,或使用 StyleSheet.create() 定义。
StyleSheet API 提供了一种优化的样式定义方式
样式随后使用 style prop 应用于组件
来源
React Native 组件接受多种样式属性。以下是常见样式类别的表格:
| 样式类别 | 示例 | 描述 |
|---|---|---|
| 布局 | flex, flexDirection, width, height | 控制组件的尺寸和定位 |
| 外边距 (Margins) | margin, marginTop, marginHorizontal | 控制组件外部的间距 |
| 填充 | padding, paddingLeft, paddingVertical | 控制组件内部的间距 |
| 边框 | borderWidth, borderRadius, borderColor | 控制组件边框 |
| 背景 | backgroundColor, backgroundImage | 控制组件背景 |
| 文本 | color, fontSize, fontWeight | 控制文本外观 |
| 变换 | transform, transformOrigin | 对组件应用变换 |
| 阴影 | shadowColor, shadowOpacity, boxShadow | 对组件应用阴影 |
来源
View 组件是 React Native 中最基本的构建块。它是一个容器,支持使用 Flexbox 进行布局、样式设置、触摸处理和可访问性控制。
View 组件接受各种属性来控制样式和行为。
来源
View 样式控制 View 组件的外观和布局。它们包括:
典型的 View 样式示例
来源
React Native 的样式不像 Web 上的 CSS 那样具有级联性。相反,它使用更明确的组合模型。
样式可以使用数组组合,后面的样式具有更高的优先级。
样式可以通过 JavaScript 表达式有条件地应用。
StyleSheet.compose 方法允许组合样式。
来源
React Native 包含一些超越基本 CSS 样式的的高级功能。
组件可以使用 transform 属性进行变换,该属性接受一个变换对象数组。
来源
React Native 支持 iOS 上的阴影和 Android 上的 Z 轴高度 (Elevation)。
来源
React Native 支持滤镜,可用于对组件应用视觉效果。
来源
React Native 允许您为 iOS 和 Android 创建特定平台的样式。
使用 Platform 模块
使用特定平台的扩展名:
Component.ios.js - iOS 特定实现Component.android.js - Android 特定实现来源
React Native 提供了一个 Animated API 来创建动画。核心组件(如 View、Text 和 Image)都有动画版本。
createAnimatedComponent 函数用于创建普通组件的动画版本。
来源
React Native 中的样式系统涉及 JavaScript 样式和原生平台样式之间的转换。
在原生层:
UIView 子类的属性。ViewGroup 的属性和特性。转换过程包括对以下内容的特殊处理:
来源
ScrollView 是用于创建可滚动内容区域的核心组件。它接受广泛的样式和行为属性。
ScrollView 在标准 View 样式的基础上增加了额外的滚动相关属性。
像 FlatList 和 SectionList 这样的专用列表组件是构建在 ScrollView 之上的,并为长列表提供了高效的渲染。
来源
transform 而非 position/layout:变换使用 GPU 以获得更好的性能。opacity 而非 visibility:不透明度可以进行硬件加速。来源
React Native 的 UI 组件和样式系统提供了一种强大的方式,使用熟悉的基于 JavaScript 的方法来构建跨平台的移动 UI。样式系统虽然受到 CSS 的启发,但已针对移动端进行了调整,并考虑了性能和跨平台兼容性。
理解组件层次结构、样式属性以及它们如何映射到原生元素,对于构建设计良好且高性能的 React Native 应用程序至关重要。