通过前面的学习我们已经初步认知了jsx的部分语法,今天我们详细学习一下
1.使用驼峰式命名法给大部分属性命名
function App() {
return (
<>
<div className="box" ></div>
</>
)
}
例如class在jsx中要写成className
下面是常见属性对比:
HTML 属性 | JSX 写法(驼峰式) |
---|---|
class | className |
for | htmlFor |
tabindex | tabIndex |
maxlength | maxLength |
onclick | onClick |
onchange | onChange |
readonly | readOnly |
autoplay | autoPlay |
contenteditable | contentEditable |
2.JSX 与表达式 vs 语句
{}
里能放 表达式,不能放 语句
// ✅ 表达式
{1 + 2}
{user.name}
{isLogin ? "已登录" : "未登录"}
// ❌ 语句(不能写)
{if (isLogin) { return "已登录"; }}
{for (let i=0; i<10; i++) {}}
如果要写语句,需要用函数或逻辑包装:
{(() => {
if (isLogin) return "已登录";
return "未登录";
})()}
3.条件渲染
-
三元运算符
// 三元运算符
{isLogin ? <p>欢迎回来</p> : <p>请登录</p>}
-
函数逻辑
例如:
方式 1:在渲染之前用普通 if/else
先在函数里用 if
计算出一个变量,再放到 JSX 里:
function App() {
const isLogin = true;
let content;
if (isLogin) {
content = <p>欢迎回来</p>;
} else {
content = <p>请登录</p>;
}
return (
<>
<h1>用户状态</h1>
{content}
</>
);
}
方式 2:立即执行函数(IIFE)
function App() {
return (
<>
{/* 使用 IIFE 做条件渲染 */}
{(() => {
if (isLogin) {
return <p>欢迎回来</p>;
} else {
return <p>请登录</p>;
}
})()}
</>
);
}
4.列表渲染
在 React 里,一般用 数组的 map
方法 来做循环渲染
function App() {
const fruits = ["苹果", "香蕉", "橙子"];
return (
<ul>
{fruits.map((item, index) => (
<li key={index}>{item}</li>
))}
</ul>
);
}
export default App;
-
fruits.map(...)
:循环数组 -
每次返回一个
<li>
元素 -
必须加
key
属性(React 用它来高效对比和更新 DOM),以避免渲染性能问题
5.组件渲染
例如:
function Welcome(props) {
return <h2>你好, {props.name}</h2>;
}
function App() {
return (
<div>
<Welcome name="天哥" />
<Welcome name="小明" />
</div>
);
}
React 里的 props
(属性)
-
props
是 properties 的缩写。 -
用来在 父组件 → 子组件 之间传递数据。
-
在函数式组件中,
props
是一个对象,里面包含所有传入的属性。 -
只读(immutable,不可修改)
-
子组件不能直接改
props
的值,只能使用。 -
React 强调 单向数据流(数据从父到子)。
-
-
灵活传递
-
可以传递 字符串、数字、布尔值、数组、对象、函数、JSX 元素
-