React 事件处理让你响应用户交互,如点击、输入、提交等。

示例 1: 基本点击事件

const handleClick = () => {
  setCount(c => c + 1);
};

<button onClick={handleClick}>
  点击计数: {count}
</button>

示例 2: 传递参数

React
Vue
Angular
const handleDelete = (id: number, name: string) => {
  setItems(items => items.filter(item => item.id !== id));
};

// 方式 1: 箭头函数传参
<button onClick={() => handleDelete(item.id, item.name)}>
  删除
</button>

// 方式 2: 传递整个对象
<button onClick={() => handleEdit(item)}>编辑</button>

示例 3: 事件对象

在此区域移动鼠标
const handleMouseMove = (e: React.MouseEvent) => {
  console.log(e.type);      // 'mousemove'
  console.log(e.target);    // 事件目标
  console.log(e.clientX);   // 鼠标 X 坐标
};

const handleKeyDown = (e: React.KeyboardEvent) => {
  console.log(e.key);       // 按下的键
  console.log(e.code);      // 键码
};

示例 4: 阻止默认行为和冒泡

事件冒泡:

外层 div(会收到冒泡事件)

// 阻止默认行为
const handleClick = (e) => {
  e.preventDefault();
};

// 阻止事件冒泡
const handleClick = (e) => {
  e.stopPropagation();
};

示例 5: 键盘事件

按键信息:

Key: -

Code: -

修饰键: -

已提交:

暂无

const handleKeyDown = (e: React.KeyboardEvent) => {
  if (e.key === 'Enter') {
    // 提交
  }
  if (e.key === 'Escape') {
    // 取消
  }
  if (e.ctrlKey && e.key === 's') {
    e.preventDefault();  // 阻止浏览器保存
    // 自定义保存
  }
};

示例 6: 表单事件

✅ 表单已提交!数据: {"username":"","email":""}
const handleSubmit = (e: React.FormEvent) => {
  e.preventDefault();  // 阻止页面刷新
  // 处理提交
};

const handleChange = (e: React.ChangeEvent<HTMLInputElement>) => {
  const { name, value } = e.target;
  setFormData(prev => ({ ...prev, [name]: value }));
};

<form onSubmit={handleSubmit}>
  <input
    name="username"
    onChange={handleChange}
    onFocus={() => setFocused('username')}
    onBlur={() => setFocused(null)}
  />
</form>