Tailwind CSSTailwind CSS
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
Home
  • Tailwind CSS 书籍目录
  • Vue 3 开发实战指南
  • React 和 Next.js 学习
  • TypeScript
  • React开发框架书籍大纲
  • Shadcn学习大纲
  • Swift 编程语言:从入门到进阶
  • SwiftUI 学习指南
  • 函数式编程大纲
  • Swift 异步编程语言
  • Swift 协议化编程
  • SwiftUI MVVM 开发模式
  • SwiftUI 图表开发书籍
  • SwiftData
  • ArkTS编程语言:从入门到精通
  • 仓颉编程语言:从入门到精通
  • 鸿蒙手机客户端开发实战
  • WPF书籍
  • C#开发书籍
learn
  • Java编程语言
  • Kotlin 编程入门与实战
  • /python/outline.html
  • AI Agent
  • MCP (Model Context Protocol) 应用指南
  • 深度学习
  • 深度学习
  • 强化学习: 理论与实践
  • 扩散模型书籍
  • Agentic AI for Everyone
langchain
  • 第一章:React 核心概念

第一章:React 核心概念

事件处理

在 React 中,事件处理是构建交互式用户界面的重要部分。React 的事件处理与 DOM 元素的事件处理非常相似,但有一些语法上的差异。

基本语法

React 事件使用驼峰命名法(camelCase)而不是全小写。例如,HTML 中的 onclick 在 React 中写为 onClick。

function Button() {
  function handleClick() {
    alert('Button clicked!');
  }

  return (
    <button onClick={handleClick}>
      Click Me
    </button>
  );
}

事件对象

React 中的事件处理函数会自动接收一个合成事件(SyntheticEvent)对象,它是跨浏览器原生事件的包装器。

function InputField() {
  function handleChange(event) {
    console.log('Input value:', event.target.value);
  }

  return <input type="text" onChange={handleChange} />;
}

绑定 this

在类组件中,需要特别注意 this 的绑定问题:

class Toggle extends React.Component {
  constructor(props) {
    super(props);
    this.state = { isToggleOn: true };
    
    // 为了在回调中使用 `this`,这个绑定是必不可少的
    this.handleClick = this.handleClick.bind(this);
  }

  handleClick() {
    this.setState(prevState => ({
      isToggleOn: !prevState.isToggleOn
    }));
  }

  render() {
    return (
      <button onClick={this.handleClick}>
        {this.state.isToggleOn ? 'ON' : 'OFF'}
      </button>
    );
  }
}

替代绑定方法

  1. 公共类字段语法(推荐):

    handleClick = () => {
      this.setState(prevState => ({
        isToggleOn: !prevState.isToggleOn
      }));
    }
    
  2. 箭头函数(注意可能的性能影响):

    <button onClick={() => this.handleClick()}>
      Click
    </button>
    

传递参数

在事件处理中传递额外参数:

function ListItem({ id, text }) {
  function handleDelete(id, event) {
    console.log('Deleting item:', id);
    console.log('Event:', event);
  }

  return (
    <li>
      {text}
      <button onClick={(e) => handleDelete(id, e)}>
        Delete
      </button>
    </li>
  );
}

阻止默认行为

在 React 中不能通过返回 false 来阻止默认行为,必须显式调用 preventDefault:

function Form() {
  function handleSubmit(e) {
    e.preventDefault();
    console.log('Form submitted');
  }

  return (
    <form onSubmit={handleSubmit}>
      <button type="submit">Submit</button>
    </form>
  );
}

常见事件

React 支持大多数 DOM 事件,包括:

  • 鼠标事件:onClick, onDoubleClick, onMouseEnter, onMouseLeave
  • 键盘事件:onKeyDown, onKeyUp, onKeyPress
  • 表单事件:onChange, onSubmit, onInput
  • 焦点事件:onFocus, onBlur
  • 触摸事件:onTouchStart, onTouchMove, onTouchEnd

最佳实践

  1. 避免在 render 方法中创建新函数,这可能导致不必要的重新渲染
  2. 对于性能敏感的场景,考虑使用事件委托
  3. 保持事件处理函数简洁,复杂逻辑可以提取到单独的方法中
  4. 使用有意义的函数命名,如 handleClick 而不是 clickHandler

通过掌握这些事件处理技巧,你将能够构建出更加交互性强的 React 应用。

Last Updated:: 7/1/25, 3:39 PM