Litho
  • Introduction
  • 简介
    • Litho 是什么
    • 动机
    • 使用
  • 快速开始
    • 新手入门
    • 教程
    • 编写 Component
    • 使用 Component
  • 参考
    • Layout Specs
    • Mount Specs
    • Props
    • State
    • Layout
    • Error Boundaries
    • Borders
    • RecyclerCollectionComponent
    • 变换动画
    • 术语
  • 事件处理
    • 总览
    • 触摸处理
    • 可见性处理
  • Sections
    • Sections 是什么
    • Sections 教程
    • GroupSection Specs
    • DiffSection Specs
    • Sections Building Blocks
    • 与UI交互
    • Sections 单元测试
    • Sections 与 Views
    • Services
    • Sections 架构
    • Working Ranges
  • 兼容性
    • Styles
    • Accessbility
    • RTL
  • 测试
    • 总览
    • 单元测试基础
    • 子组件测试
    • 匹配 Props
    • 测试 InjectProps
    • 测试事件处理
    • Espresso
    • 在Android Studio上运行测试
  • 高级指南
    • Recycler
    • 自定义布局
    • TreeProps
    • 增量安装
    • 创建 ComponentTree
  • 架构
    • 代码生成
    • 异步布局
    • 增量安装
    • 铺平 View 结构
    • 回收
  • 附加资源
    • 最佳实践
    • FAQ
  • 工具
    • 调试
    • 开发者选项
  • 更多参与
    • 如何参与
    • 社区展示
    • 资源库结构
Powered by GitBook
On this page
  • Component Specs
  • Spec, Lifecycle, and Component 类
  1. 快速开始

编写 Component

Previous教程Next使用 Component

Last updated 7 years ago

Component Specs

组件 spec 会生成在UI中使用的实际组件类。有两种类型的组件 spec:

  • Layout Spec:将其他组件组合到特定的布局中。这相当于 Android 上的 ViewGroup 。

  • Mount Spec:可以渲染 View 或 Drawable 组件。

现在,让我们来看看 Layout Spec 的整体结构:

@LayoutSpec
class MyComponentSpec {

  @OnCreateLayout
  static Component onCreateLayout(
      ComponentContext c,
      @Prop String title,
      @Prop Uri imageUri) {
    ...
  }
}

有几点要注意:

  • 组件 Spec 只是一个普通的java类,带有一些特殊的注解。

  • 组件 Spec 是完全无状态的,没有任何类成员。

  • 使用 @Prop 标注的参数将自动成为组件构建器的一部分。

  • 对于从组件 Spec 创建的组件,需要将 Litho 注解处理器添加到 BUCK 或 Gradle 文件中。请参阅了解如何操作。您可以通过将生成的类设成包级私有,在类的注解上加上 isPublic = false 。

Spec, Lifecycle, and Component 类

组件 Spec 类将被处理以生成与 Spec 名相同但没有 Spec 后缀的ComponentLifecycle 子类。例如,MyComponentSpec 类会生成一个 MyComponent 类。

真正在产品中使用的是这个生成的 ComponentLifecycle 子类。 spec 类将在运行时用作这个生成代码的委托。

生成的类种暴露的唯一 API 是 create(...)方法,它为您在 spec 类中声明的 @Props 返回相应的Component.Builder。

在运行时,特定类型的所有组件实例共享相同的 ComponentLifecycle 引用。这意味着每个组件类型只有一个spec实例,而不是每个组件实例。

入门指南