在本章中,我们将深入探讨 Preact 的核心概念:组件和元素。Preact 是一个轻量级的 JavaScript 库,用于构建用户界面。它的设计灵感来源于 React,并且保持了与 React 的高度兼容性,但体积更小、性能更好。
元素:UI 的基本构建块
在 Preact 中,元素是 UI 的基本单元。它们描述了屏幕上应该显示的内容。元素是纯函数调用的结果,通常看起来像这样:
const element = <div>Hello, world!</div>;
元素是不可变的。一旦创建,就不能改变其子元素或属性。如果你需要更新 UI,你需要创建新的元素并将其传递给 Preact。
创建简单的元素
最简单的元素就是一个字符串标签,比如 <div>
或 <span>
。这些标签可以包含文本或嵌套的其他元素。例如:
-- -------------------- ---- ------- ----- -------- - ----------- ------------- -- ------ ----- ------------- - - ----- ---------- -- ---------- ----------- --- -------------- ------ --
使用属性
元素还可以拥有属性,这些属性被用来控制元素的行为和外观。属性通常以键值对的形式出现,键名是属性名,键值是属性值。例如:
const elementWithProps = <div className="container">Hello, world!</div>;
在这个例子中,className
是一个属性,它指定了元素的 CSS 类名。
动态属性
属性不仅限于静态值,也可以是动态的。你可以使用 JavaScript 表达式来计算属性值。例如:
const name = "Alice"; const elementWithDynamicProp = <div className={`greeting-${name}`}>Hello, {name}!</div>;
在这个例子中,name
是一个变量,我们使用模板字符串来动态生成 className
和元素内的文本。
组件:复用和抽象的利器
组件是 Preact 中用来封装可重用 UI 部分的一种方式。它们可以接收任意数量的参数(称为“props”),并且返回一个描述 UI 的元素。
函数组件
函数组件是最简单的一种组件形式。它接收 props
作为参数,并返回一个元素:
function Welcome(props) { return <h1>Hello, {props.name}!</h1>; } const element = <Welcome name="Alice" />;
在这个例子中,Welcome
是一个函数组件,它接收 name
属性,并根据这个属性返回一个问候语。
类组件
类组件是一种更加复杂的形式,它允许你添加更多的功能,如状态管理和生命周期方法。类组件继承自 Component
类:
-- -------------------- ---- ------- ------ - --------- - ---- --------- ----- ------- ------- --------- - -------- - ------ ---------- ------------------------ - - ----- ------- - -------- ------------ ---
在这个例子中,Welcome
是一个类组件,它通过 render
方法返回一个元素。
组件的状态
状态是一个组件内部的数据模型,它可以随着用户的交互而变化。状态可以通过 useState
钩子来管理:
-- -------------------- ---- ------- ------ - -------- - ---- --------------- -------- --------- - ----- ------- --------- - ------------ -------- ----------- - -------------- - --- - ------ - ----- ------ ------- ------- --------- ------- ------------------------- ----------- ------ -- -
在这个例子中,Counter
组件有一个状态 count
,用户每次点击按钮时,count
就会增加。
默认 Props
默认 props 可以确保即使没有提供某些 props,组件也能正常工作。你可以使用默认值来为 props 设置默认值:
function Welcome(props) { return <h1>Hello, {props.name || 'Guest'}!</h1>; } const element = <Welcome />; // 输出 "Hello, Guest!"
在这个例子中,如果 name
没有被提供,则会使用 'Guest'
作为默认值。
传递子元素
除了接收普通的 props 外,组件还可以接收子元素。子元素通常用于组合 UI:
-- -------------------- ---- ------- -------- ----- -------- -- - ------ ---- --------------------------------- - ----- ------- - - ----- ------- -- - ----- ------------- --------- ---- -- - ----------- ------ --
在这个例子中,Box
组件接收一个 children
prop,它包含了所有嵌套在 Box
标签内的元素。
总结
通过学习 Preact 的元素和组件,你已经掌握了构建用户界面的基本工具。元素是 UI 的基本单元,而组件则是用来封装可重用 UI 部分的一种方式。无论是简单的函数组件还是复杂的类组件,它们都可以接收 props 来定制行为,并且可以管理自己的状态。希望这些知识能够帮助你在 Preact 中构建出精彩的 UI!