React黑马视频自学笔记02

2023-11-04

14.react事件处理

14.1事件绑定

语法:on+事件名称={事件处理程序},比如:

onClick={

()=>{

}

}

注意:React事件采用驼峰命名法,比如:onMouseEnter,onFocus

函数组件绑定事件的时候不用this

14.2事件对象

可以通过事件处理程序的参数获取到事件对象

react中的事件对象叫做:合成事件(对象)

可以兼容所有浏览器,无需担心跨浏览器兼容性问题

这是一段阻止冒泡的代码

class App extends React.Component {
  handleClick(e) {
    // 阻止浏览器的默认行为
    e.preventDefault()
    
    console.log('a标签的单击事件触发了')
  }
  render() {
    return (
      <a href="http://itcast.cn/" onClick={this.handleClick}>传智播客</a>
    )
  }
}

15.有状态组件和无状态组件

函数组件又叫无状态组件,类组件又叫有状态组件

状态(state)即数据

函数组件没有自己的状态,只负责数据展示(静态)

类组件又自己的状态,负责更新ul,让页面动起来

16.组件中的state和setState

16.1state的基本使用

状态就是数据,组件内部私有的,只能再组件内使用

state的值是对象,表示一个组件中可以有多个数据

在组件里面这么去创建一个叫count的数据

 state = {
      count:10
    }

然后再在下面用{^实例^.state.count}就可以去获取到了

16.2setState修改状态

状态是可变的

语法:this.setState(

        {要修改的数据}·

注意:不要直接修改state中的值,这是错误的!

思想:数据驱动视图

类似于这样,每次点击按钮之后count的值就会加一,

每次都会重新获取到最新的count的大小,所以就可以一直加

class App extends React.Component {
  state = {
    count:0
  }
  render(){
    return(
      <div>
        <h1>计数器:{this.state.count}</h1>
        <button onClick={() => {
          this.setState({
            count:this.state.count+1,
          })
        }}>+1</button>
      </div>
    )
  }

17.从jsx中抽离事件处理程序

jsx中掺杂过多js逻辑代码,就会显得非常混乱

推荐:将逻辑抽离到单独的方法中,保证jsx结构清晰

原因:事件处理程序中的this的值为undefined

希望:this指向组件实例(render方法中的this即为组件实例)

18.事件绑定中改变this指向的方法

1.箭头函数

2.Function.prototype.bind()

3.class的实例方法

18.1箭头函数

<button onClick={this.onIncrement}>+1</button>
变成
<button onClick={()=>this.onIncrement()}>+1</button>

箭头函数中的this指向外部环境,此处指向render()方法,也就是令this指向当前实例了

18.2用bind的方法解决this指向问题

加入一个es6的constructor方法

constructor(){
    super()
    this.onIncrement = this.onIncrement.bind(this)
  }

这样因为是使用了bind,下面再去onlncrement的时候this就是更改之后的this了

18.3class的实例方法

利用箭头函数形式的class实例方法

此方法为实验性语法,但是,由于babel的存在可以直接使用

直接在方法处理功能那边就改变this了

  onIncrement() {
    console.log('事件处理程序中的this',this);
    this.setState({
      count:this.state.count + 1
    })
  }
  变成
  onIncrement = ()=>{
    console.log('事件处理程序中的this',this);
    this.setState({
      count:this.state.count + 1
    })
  }

这三种最推荐class这种

19.受控组件与非受控组件

19.1受控组件

html中的表单元素是可输入的,也就是有自己的可变状态。但是react中的可变状态都是保存在state中,并且只能通过setState方法来修改,react将state与表单元素value绑定到一起,由state的值来控制表单元素的值

受控组件:其值受到React控制的表单元素

直接

<input type="text" value={this.state.txt} />

就让value值直接等于state的值

这里的话state长这样

state = {
    txt:""
  }

然后去加入一个onChange事件去监听变化

<input type="text" value={this.state.txt} onChange={this.handleChange}/>

这样就行了


我这边可能要开始看文档了,这个专栏笔记会更慢点了

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React黑马视频自学笔记02 的相关文章

随机推荐

  • Linux input 子系统详解

    1 模块概述 1 1 相关资料和代码研究 drivers input include uapi linux input event codes h 2 模块功能 linux核心的输入框架 3 模块学习 3 1 概述 Linux输入设备种类繁
  • [转] DSP缓存机制

    本文主要以DSP讲解cache原理 但原理与CPU是相通的 故转载 原文地址 DSP 缓存机制 桑迪亚哥的博客 CSDN博客 dsp的cache DSP 缓存机制 注 本文说明的DSP基于TI c6000系列的C66x DSP 目录 DSP
  • 分类模型之职员离职分析

    今天要带来的是机器学习中几种重要的分类模型 分别是 逻辑回归 支持向量机 决策树 随机森林这四种算法模型 这里就不主要介绍模型背后的理论知识了 直接上数据 在数据分析中再来谈这些算法模型 今天要讨论的是Kaggle上的公司职员离职数据集 这
  • JS 简单实现电子时钟

    时钟的确是非常简单的一个功能 我们只需要通过js编写一个方法来获取时间的时分秒 再用定时器每隔一秒进行刷新即可 注意 通过Date类拿到的时分秒直接拼接起来可能是这样的 8 2 3 而我们想看到的效果应该是 08 02 03 所以这里我们会
  • 对于区块链,各个国家对它又是一种什么态度呢?

    在这场席卷全球的区块链技术 数字资产变革中 区块链作为一种颠覆性的技术 它的出现对各国政府提出了新的问题 对于这个问题 各国政府给出了怎样的答复 区块链在各国发展的政策环境又如何 并且我们除了要了解本国的立场之外 也需要掌握其他国家的态度
  • 谁发明了区块链?谁是中本聪?

    区块链技术首次在由中本聪 Satoshi Nakamoto 撰写的题为 比特币 对等电子现金系统 的论文中介绍 在这篇文章中 中本聪描述了区块链技术的基础 所有区块链创新都可以追溯到中本聪 他是区块链和比特币的发明者 但是 谁是中本聪 没人
  • 使用vscode搭建vue项目并引用element-ui

    1 环境准备 Visual studio code nodejs vue cli yarn 2 新建项目 1 打开Visual studio code 打开一个你想要创建项目的文件夹 2 打开集成终端如下图所示或者使用快捷键 3 在终端中输
  • LevelDB.NET 使用

    LevelDB是google实现的非常高效的kv数据库 多数是和redis比较 这里记录下如何使用 新建项目 Nuget添加类库 通过反编译发现运行时是 NET 4 0 这里我用4 5测试需要选择64位平台 代码 写数据 db Put Wr
  • python3排序 sorted(key=lambda)

    python3排序sorted key lambda 当待排序列表的元素由多字段构成时 我们可以通过sorted iterable key reverse 的参数key来制定我们根据那个字段对列表元素进行排序 key lambda 元素 元
  • 【华为OD统一考试B卷

    华为OD统一考试A卷 B卷 新题库说明 2023年5月份 华为官方已经将的 2022 0223Q 1 2 3 4 统一修改为OD统一考试 A卷 和OD统一考试 B卷 你收到的链接上面会标注A卷还是B卷 请注意 根据反馈 目前大部分收到的都是
  • StringBuilder.append()与String的"+"的效率PK

    如果String通过 来拼接 如果拼接的字符串是常量 则效率会非常高 因为会进行编译时优化 这个时候StringBuilder的append 是达不到的 如果将String的 放在循环中 会创建很多的StringBuilder对象 并且执行
  • 信贷风控中Vintage、滚动率、迁移率的理解

    风控业务背景 信贷风险管理是一门艺术 更是一门科学 资产质量分析中常会涉及到三个理论 账龄分析 Vintage Analysis 用以分析账户成熟期 变化规律等 滚动率分析 Roll Rate Analysis 用以定义账户好坏程度 迁移率
  • 未解决,fsmgmt.msc共享文件夹管理中,文件夹无属性选项

    之前用的win10家庭版 都没有fsmgmt msc 现在升级成专业版发现没有属性 https jingyan baidu com article 358570f69e9b13ce4724fce9 html 我的电脑
  • windows下redis设置redis开机自启动方法

    1 查看一下Redis服务是否注册 1 Win R快捷键输入services msc 然后回车或者点击确定 2 win10桌面 此电脑 右键单击 管理 gt 服务与应用程序 gt 服务 此处输入R 即可看到R开头的服务列表 在没有添加服务的
  • IDEA+Springboot+Git+jenkins+tomcat实现自动部署-基本流程

    jenkins构建 前言 测试项目准备 一 jenkins构建一个新项目 把Gitee仓库的项目获取到本地打包运行 二 jenkins构建一个新项目 把Gitee仓库的项目获取到本地打包 通过Publish Over SSH传输到另外一台机
  • 《在IDEA中配置MySQL的驱动程序》

    一 下载mysql connecter 下载地址 http dev mysql com downloads connector j 具体步骤已在下图中标注 注意是下载zip压缩包格式 因为解压缩安装很方便 下载完成后得到压缩包如下 二 安装
  • 深度详解ResNet到底在解决一个什么问题?

    点击上方 小白学视觉 选择加 星标 或 置顶 重磅干货 第一时间送达 https www zhihu com question 64494691 本文仅作为学术分享 如果侵权 会删文处理 最近看到不少ResNet的变体 比如ResNeSt
  • 【软考】-高项-整合管理-重要知识点思维导图

    整合管理 文章目录 整合管理 含义 内容 项目管理计划 含义 组件 开工 会议 分类 目的作用 如何召开高效会议 批准的变更请求 可交付成果 工作绩效数据 变更的流程 1 提出与记录变更申请 2 初审变更 初审目的 常见方式为变更申请文档的
  • 实例分割模型Mask R-CNN详解:从R-CNN,Fast R-CNN,Faster R-CNN再到Mask R-CNN

    Mask R CNN是ICCV 2017的best paper 彰显了机器学习计算机视觉领域在2017年的最新成果 在机器学习2017年的最新发展中 单任务的网络结构已经逐渐不再引人瞩目 取而代之的是集成 复杂 一石多鸟的多任务网络模型 M
  • React黑马视频自学笔记02

    14 react事件处理 14 1事件绑定 语法 on 事件名称 事件处理程序 比如 onClick gt 注意 React事件采用驼峰命名法 比如 onMouseEnter onFocus 函数组件绑定事件的时候不用this 14 2事件