第一个组件
本教程共 50 篇 · 第 6 篇 · 更新于 2026-07-29 · 约 6 分钟阅读
6. 第一个组件
本节目标:学会定义函数组件、理解命名规则、掌握组件的组合与复用。
组件是什么
组件是可复用的 UI 单元。它包含自己的外观(JSX)和逻辑(JavaScript)。
你可以把组件理解成自定义的 HTML 标签。<button> 是原生标签,<UserCard /> 是你自己定义的。
定义一个组件
React 组件就是一个返回 JSX 的 JavaScript 函数:
function Profile() {
return (
<img
src="https://example.com/photo.jpg"
alt="张三"
className="avatar"
/>
);
}
就这么简单。函数名 Profile,返回一段 JSX。
两个必须遵守的规则
规则一:名字必须大写开头
React 靠首字母大小写区分组件和 HTML 标签:
// 大写开头 → React 认为是组件
<Profile />
// 小写开头 → React 认为是 HTML 标签
<profile />
// 错误:小写开头,React 找不到组件
function profile() {
return <img src="..." alt="..." />;
}
// 正确:大写开头
function Profile() {
return <img src="..." alt="..." />;
}
Warning我曾经踩过这个坑——组件名叫
profile,怎么都不渲染,看了半天才发现首字母没大写。React 不会报错,就是啥都不显示。
规则二:必须导出才能被其他文件使用
// Profile.jsx
export default function Profile() {
return <img src="..." alt="..." />;
}
export default 让这个组件能被其他文件 import。
使用组件
定义好组件后,可以像 HTML 标签一样使用:
// App.jsx
import Profile from './Profile';
function App() {
return (
<div>
<h1>用户列表</h1>
<Profile />
<Profile />
<Profile />
</div>
);
}
这里 <Profile /> 用了三次,会渲染三张图片。组件写一次,用多次——这就是复用的意义。
组件的组合
组件可以嵌套其他组件,形成树状结构:
function Avatar() {
return <img className="avatar" src="..." alt="..." />;
}
function UserName() {
return <span className="name">张三</span>;
}
function UserCard() {
return (
<div className="card">
<Avatar />
<UserName />
</div>
);
}
function App() {
return (
<div>
<UserCard />
<UserCard />
</div>
);
}
组件树:
App
└── UserCard
├── Avatar
└── UserName
浏览器看到的是什么
虽然你写的是 <Profile />,浏览器最终看到的只是普通 HTML:
<img src="https://example.com/photo.jpg" alt="张三" class="avatar" />
React 组件只是开发时的抽象,运行时不存在。
不要嵌套定义组件
一个常见错误:在组件内部定义另一个组件。
// 错误示范
function Gallery() {
// 不要这样写!
function Profile() {
return <img src="..." alt="..." />;
}
return (
<div>
<Profile />
</div>
);
}
问题:每次 Gallery 重新渲染,Profile 都是一个新的函数。React 会认为这是不同的组件,导致状态丢失和性能问题。
正确做法:在顶层定义组件。
// 正确
function Profile() {
return <img src="..." alt="..." />;
}
function Gallery() {
return (
<div>
<Profile />
</div>
);
}
Note组件内定义组件会导致状态重置——每次父组件重新渲染,子组件都是全新的函数,React 认为是不同的组件。这个行为至今未变,所以别这么写。
动手试试
打开 src/App.jsx,把默认内容替换成:
function Welcome() {
return <h1>欢迎来到我的应用</h1>;
}
function App() {
return (
<div>
<Welcome />
<Welcome />
</div>
);
}
export default App;
保存后浏览器应该显示两个”欢迎来到我的应用”。
本节小结
- 组件是返回 JSX 的 JavaScript 函数
- 名字必须大写开头(PascalCase)
- 用
export default导出,用import引入 - 组件可以组合、复用
- 不要在组件内部定义组件
下一节深入 JSX 的语法规则。