笔记九、React组件的核心属性—事件处理(handleClick事件)

本文讲述了如何在React组件中正确处理事件绑定,特别是handleClick方法的使用,强调了在render()中调用时需要加上`this`,以及在构造函数中绑定this指向以确保state的正确更新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件的绑定和改变状态

  • handleClick 放在类 App 的原型对象上,供实例使用,在 render() 中调用时必须加 this。

import React from "react";

// 所有 React 组件必须像纯函数一样保护它的 props 不被更改
class App extends React.Component {

    // 点击更改 state
    constructor(props) {
        super(props);
        this.state = {isWash: false};
        // 软连接,改变 this 指向
        // 相当于 定义了一个新的函数变量,通过软连接,指向原型中的 handleClick,让 handleClick 和 App 的其他变量同级
        this.handleClick = this.handleClick.bind(this)
    }

    render() {
        // 打印指向 App 的对象
        // handleClick 方法本来是定义在 App 原型之上的,直接打印 handleClick 会找不到,要 this.handleClick
        console.log(this);
        return (
            <>
                <button onClick={this.handleClick} style={{color: "blueviolet"}}>
                    请点击
                </button>
                <div>
                    老王今天 {this.state.isWash ? "去" : "没去"} 洗脚了
                </div>
            </>
        )
    };

    handleClick() {
        // console.log('点击了');
        // 此时 this 为 undefined
        console.log('handleClick->this', this);
        // 修改 state 的唯一方法
        this.setState({isWash: !this.state.isWash})
    }
}

export default App

改变构造函数中的状态state 

this.handleClick = this.handleClick.bind(this)

handleClick 要访问构造器的 state 就必须要改变 this 指向实例

  • handleClick 并不是通过实例调用的

  • 类中的方法默认都开启了局部的严格模式,所以 handleClick this 为 undefined

类似:
const a = new App();
const r = a.click;
r();

### 黑马程序员 React 18 学习笔记教程 React 是一种用于构建用户界面的 JavaScript 库,而黑马程序员提供了丰富的学习资源来帮助开发者掌握这一技术。以下是有关 React 18 的一些核心知识点以及如何通过这些知识点深入理解 React。 #### 一、React 基础概念 React 提供了一种声明式的方式来构建用户界面。其核心特性包括组件化开发、虚拟 DOM 和单向数据流。对于初学者来说,了解以下基础知识是非常重要的: - **JSX语法**:这是一种扩展的 JavaScript 语法,允许我们在 JSX 中嵌入表达式[^3]。 - **列表渲染与条件渲染**:通过 `map` 方法可以实现列表渲染;利用三元运算符或者逻辑判断语句可完成条件渲染。 ```javascript const items = ['Item1', 'Item2', 'Item3']; const listItems = items.map((item, index) => <li key={index}>{item}</li>); ``` - **事件绑定**:React 使用合成事件系统处理用户的交互行为。例如点击按钮触发函数操作。 ```javascript function handleClick() { console.log('Button clicked!'); } <button onClick={handleClick}>Click Me</button> ``` #### 二、React Hooks Hooks 是 React 16.8 引入的新功能,它使得我们可以在不编写类的情况下使用状态和其他 React 特性。常用的 Hook 包括但不限于以下几个方面: - **useState**:管理组件的状态变量。 - **useEffect**:执行副作用的操作,比如订阅外部数据源或手动更改 DOM。 ```javascript import { useState } from 'react'; function Counter() { const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> Click me </button> </div> ); } ``` #### 三、React 组件间通信 在复杂的项目中,不同层次之间的组件可能需要共享某些信息。这可以通过多种方式实现,其中最常见的是 props 下钻和 Context API[^1]。 - **Props传递**:父级组件属性传给子级组件作为配置参数。 - **Context API**:当多个层级都需要访问相同的数据时,使用上下文提供全局状态管理方案。 #### 四、React Router 随着应用规模的增长,页面导航变得越来越重要。React Router 支持两种主要路由模式——History 模式和 Hash 模式[^4]。前者依赖于 HTML5 History API 实现平滑过渡效果,后者则依靠 URL 锚点变化驱动视图切换过程。 ```javascript // 创建 history 路由器实例 import { createBrowserRouter } from 'react-router-dom'; const router = createBrowserRouter([ { path: '/', element: <Home /> }, { path: '/about', element: <About /> } ]); ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ElendaLee

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值