React 组件是 UI 的基本构建块,了解组件的核心概念是掌握 React 的第一步。

示例 1: 最简单的组件

Hello, React!

function SimpleGreeting() {
  return <h3>Hello, React!</h3>;
}
说明: 组件就是一个返回 JSX 的函数,命名必须大写开头。

示例 2: 带 Props 的组件

欢迎, 张三!

身份: 管理员

interface WelcomeProps {
  name: string;
  role?: string;  // 可选,默认 "访客"
}

function Welcome({ name, role = "访客" }: WelcomeProps) {
  return (
    <div>
      <p>欢迎, {name}!</p>
      <p>身份: {role}</p>
    </div>
  );
}

// 使用
<Welcome name="张三" role="管理员" />

示例 3: 组件组合

张三

zhangsan@example.com

在线
李四

lisi@example.com

忙碌
王五

wangwu@example.com

离线

组件结构:

UserCard
├── Avatar (头像)
│   └── 名字首字母 + 姓名
├── 邮箱信息
└── Badge (状态标签)
组合优势: 每个小组件可以独立复用、测试和维护。

示例 4: 条件返回

请登录以继续

function LoginStatus({ isLoggedIn, username }) {
  if (!isLoggedIn) {
    return <div>请登录</div>;
  }
  return <div>欢迎, {username}!</div>;
}

示例 5: 纯组件概念

纯组件 ✅

Hello, React!

相同的 name,永远返回相同的结果

非纯组件 ❌

渲染次数: 1

每次渲染结果都不同(修改了外部变量)

注意: 组件应该是纯函数,不要在渲染过程中修改外部变量或产生副作用。 副作用应该放在 useEffect 中。

示例 6: 函数组件 vs 类组件

函数组件

0

function FunctionCounter() {
  const [count, setCount] = useState(0);
  return (
    <div>
      <p>{count}</p>
      <button onClick={() => setCount(c => c + 1)}>
        +1
      </button>
    </div>
  );
}

类组件(了解即可)

代码量更多,需要处理 this 绑定

// 类组件(旧写法)
class ClassCounter extends React.Component {
  state = { count: 0 };

  handleClick = () => {
    this.setState({ count: this.state.count + 1 });
  };

  render() {
    return (
      <div>
        <p>{this.state.count}</p>
        <button onClick={this.handleClick}>+1</button>
      </div>
    );
  }
}
特性函数组件类组件
代码量
Hooks 支持
this 问题
推荐程度主流维护模式