JSX 是 React 的核心部分,它让你可以在 JavaScript 中编写 HTML 结构,同时保持 JavaScript 的全部功能。 JSX 最终会被编译成普通的 JavaScript 函数调用。
// JSX 语法
function Welcome() {
return <h1>你好,React!</h1>;
}你今年 25 岁了。
明年你将会 26 岁。
小明 是你的名字。
function Greeting() {
const name = "小明";
const age = 25;
return (
<div>
<h1>你好,{name}!</h1>
<p>你今年 {age} 岁了。</p>
<p>明年你将会 {age + 1} 岁。</p>
<p>{name.toUpperCase()} 是你的名字。</p>
</div>
);
}当前主题: 浅色模式
未登录
这段内容会根据按钮的点击状态显示或隐藏
您以访客身份访问
暂无数据
function ThemeSwitcher() {
const [isDarkMode, setIsDarkMode] = useState(false);
return (
<div className={isDarkMode ? 'dark-theme' : 'light-theme'}>
<h1>主题切换器</h1>
<button onClick={() => setIsDarkMode(!isDarkMode)}>
{isDarkMode ? '切换到浅色模式' : '切换到深色模式'}
</button>
<p>
当前主题: {isDarkMode ? '深色模式' : '浅色模式'}
</p>
</div>
);
}
function UserStatus() {
const [isOnline, setIsOnline] = useState(false);
const [lastSeen, setLastSeen] = useState('刚刚');
return (
<div>
<h1>用户状态</h1>
<div className="status-indicator">
<span className={isOnline ? 'online' : 'offline'}>
{isOnline ? '在线' : '离线'}
</span>
{!isOnline && <span className="last-seen">最后在线: {lastSeen}</span>}
</div>
<button onClick={() => setIsOnline(!isOnline)}>
{isOnline ? '设为离线' : '设为在线'}
</button>
</div>
);
}
function PriceDisplay() {
const [price, setPrice] = useState(100);
const [isDiscounted, setIsDiscounted] = useState(false);
const finalPrice = isDiscounted ? price * 0.8 : price;
return (
<div>
<h1>价格显示</h1>
<div className="price">
原价: {price}元
{isDiscounted && <span className="discount">(8折优惠)</span>}
</div>
<div className="final-price">
最终价格: {finalPrice}元
</div>
<button onClick={() => setIsDiscounted(!isDiscounted)}>
{isDiscounted ? '取消优惠' : '应用优惠'}
</button>
</div>
);
}输入的内容:
将鼠标移入此区域
function ClickExample() {
const handleClick = () => {
alert('按钮被点击了!');
};
return (
<button onClick={handleClick}>
点击我
</button>
);
}function ControlledForm() {
const [formData, setFormData] = useState({
name: '',
email: '',
message: ''
});
const handleChange = (e: React.ChangeEvent<HTMLInputElement | HTMLTextAreaElement>) => {
const { name, value } = e.target;
setFormData(prev => ({
...prev,
[name]: value
}));
};
return (
<form>
<input
type="text"
name="name"
value={formData.name}
onChange={handleChange}
placeholder="姓名"
/>
<input
type="email"
name="email"
value={formData.email}
onChange={handleChange}
placeholder="邮箱"
/>
<textarea
name="message"
value={formData.message}
onChange={handleChange}
placeholder="留言"
/>
</form>
);
}function FruitList() {
const fruits = ['苹果', '香蕉', '橙子', '葡萄'];
return (
<div>
<h1>水果列表</h1>
<ul>
{fruits.map((fruit, index) => (
<li key={index}>{fruit}</li>
))}
</ul>
</div>
);
}注意:在渲染列表时,每个列表项都需要一个唯一的 "key" 属性,这有助于 React 识别哪些项发生了变化。 在实际应用中,最好使用唯一的 ID 而不是索引作为 key。
function Profile() {
return (
<div>
{/* HTML 类名使用 className 而不是 class */}
<h1 className="title">个人资料</h1>
{/* 内联样式使用对象而不是字符串 */}
<p style={{ color: 'blue', fontSize: '16px' }}>
这是一个蓝色的段落。
</p>
{/* HTML for 属性变成 htmlFor */}
<label htmlFor="name">姓名:</label>
<input id="name" type="text" />
{/* 事件处理器使用驼峰命名法 */}
<button onClick={() => alert('按钮被点击了!')}>
点击我
</button>
</div>
);
}function Component() {
return (
<div>
{/* 这是一个 JSX 注释 */}
<h1>标题</h1>
{/*
多行
JSX 注释
*/}
<p>段落</p>
<div>
文本
{/* 行内注释 */}
更多文本
</div>
</div>
);
}import React from 'react';
function ListItems() {
return (
<React.Fragment>
<li>项目 1</li>
<li>项目 2</li>
<li>项目 3</li>
</React.Fragment>
);
}Fragment 允许你将多个元素组合在一起,而不需要添加额外的 DOM 节点。 这在创建表格行、列表项或需要特定父子关系的元素时特别有用。