描述UI
1 第一个组件
1.1 什么是组件
组件是 React 的核心概念之一,是构建用户界面的基础 这里先写一个组件
import React from "react";
export default function App() {
return <h1>Hello, React!</h1>;
}
当然组件也可以返回一个 img 标签
import React from "react";
export default function App() {
return (
<img
src="https://www.baidu.com/img/flexible/logo/pc/result.png"
alt="baidu"
/>
);
}
1.2 使用组件
在导出组件之后可以在其他文件中使用这个组件
// sidebar.js
import React from "react";
export default function Sidebar() {
return (
<div>
<h1>我是Sidebar</h1>
</div>
);
}
//app.js
import React from "react";
import Sidebar from "./sidebar";
export default function App() {
return (
<div>
<h1>Hello, React!</h1>
<Sidebar />
</div>
);
}
当然也可以在一个组件内部使用多个组件
1.3 组件的使用
组件是常规的 JavaScript 函数,但是请不要在一个组件的内部定义另外的一个组,应该在顶层定义每一个组件
2 组件的导入和导出
组件可以重复利用,所以创建 一个组件之后可以添加其他组件 在上面创建了一个 Profile 组件,并且进行了渲染
function Profile() {
return <img src="https://www.fanxu.online/img/logo.webp" alt="Fanceir" />;
}
export default function Gallery() {
return (
<div>
<h1>Gallery</h1>
<Profile />
</div>
);
}
同一个文件中导出和导入多个组件
这里介绍一下默认导出和命名导出的区别 如果一个文件中只有一个组件需要导出,那么可以使用默认导出
export default function App() {
return <h1>Hello, React!</h1>;
}
如果一个文件中有多个组件需要导出,那么可以使用命名导出
export function App() {
return <h1>Hello, React!</h1>;
}
export function Sidebar() {
return <h1>我是Sidebar</h1>;
}
同一文件中,有且仅有一个默认导出,但可以有多个具名导出
注意合理的拆分组件会使代码更加清晰更加易于维护
3 使用 JSX 书写标签语言
将 HTML 转化为 JSX
使用官网的例子
<h1>海蒂·拉玛的待办事项</h1>
<img src="https://i.imgur.com/yXOvdOSs.jpg" alt="Hedy Lamarr" class="photo" />
<ul>
<li>发明一种新式交通信号灯</li>
<li>排练一个电影场景</li>
<li>改进频谱技术</li>
</ul>
转化为 JSX
export default function App() {
return (
<div>
<h1>海蒂·拉玛的待办事项</h1>
<img
src="https://i.imgur.com/yXOvdOSs.jpg"
alt="Hedy Lamarr"
class="photo"
/>
<ul>
<li>发明一种新式交通信号灯</li>
<li>排练一个电影场景</li>
<li>改进频谱技术</li>
</ul>
</div>
);
}
可以使用转化器来将 HTML 转化为 JSX
4 JSX 中使用大括号来使用 JavaScript 表达式
export default function Avatar() {
return (
<img
className="avatar"
src="https://i.imgur.com/7vQD0fPs.jpg"
alt="Gregorio Y. Zara"
/>
);
}
但是如果我想要将一个字符串属性传递给 JSX 的时可以使用{}
export default function Avatar() {
const avatarUrl = "https://i.imgur.com/7vQD0fPs.jpg";
const description = "Gregorio Y. Zara";
return <img className="avatar" src={avatarUrl} alt={description} />;
}
可以再哪里使用大括号
- 用作 JSX 标签中的文本:
<h1>{name}</h1>
- 用作 JSX 标签的属性值:
<img src={url} />
使用双大括号来使用 JavaScript 对象
export default function TodoList() {
return (
<ul style={{ color: "red", backgroundColor: "yellow" }}>
<li>发明一种新式交通信号灯</li>
<li>排练一个电影场景</li>
<li>改进频谱技术</li>
</ul>
);
}
5 将 Props 传递给组件
React 使用 props 来互相通信,每个父组件可以提供 props 给他的子组件,这一过程叫做父传子
Props 是什么
Props 是传递给 JSX 标签的信息,如 className、src、alt 等
export default function Profile() {
return (
<Avatar person={{ name: "Lin Lanying", imageId: "1bX5QH6" }} size={100} />
);
}
子组件读取 props
function Avatar({ person, size }) {
return (
<img
className="avatar"
src={`https://i.imgur.com/${person.imageId}s.jpg`}
alt={person.name}
style={{ width: size, height: size }}
/>
);
}