0205事件处理_受控_柯里化-组件-React
创始人
2025-05-30 18:46:34

文章目录

    • 1 事件处理
      • 1.1 概述
      • 1.2 示例
    • 2 非受控组件和受控组件
      • 2.1 概述
      • 2.2 登录示例-非受控
      • 2.3 登录示例-受控
    • 3 高阶函数
    • 4 函数柯里化
    • 5 React函数的非柯里化
    • 后记

1 事件处理

1.1 概述

在前面学习中我们已经接触过React中的事件处理。

  • 通过onXXX属性指定事件处理函数(注意大小写)

    • React使用自定义(合成)事件,而不是使用原生的DOM事件;
    • React中的事件是通过事件委托方式处理的(委托给组件最外层的元素处理)。
  • React给事件回调函数传递event(事件)对象,通过event.target获取发生事件的DOM元素对象。

1.2 示例

示例代码1.2-1:


0901_事件处理

点击按钮示例效果图下图1.2-1所示:

在这里插入图片描述

第二输入框失去焦点效果如下图1.2-2所示:

在这里插入图片描述

  • React官方建议尽量少使用ref,当事件源与要操作的为同一元素时,可以通过事件处理函数处理,而不使用ref。

2 非受控组件和受控组件

2.1 概述

在 React 中,组件可以分为受控组件和非受控组件。

受控组件是由 React 组件负责维护其渲染的值或状态的组件,而非受控组件是由 DOM 自身负责维护其状态的组件。

受控组件通常使用状态(state)或 props(属性)来保存数据,并在发生更改时重新渲染组件。例如,一个文本框可以作为受控组件实现,当用户输入时,状态会被更新,而这个更新会触发组件的重新渲染。

非受控组件则是由 DOM 自己来管理其状态的组件。例如,一个普通的 HTML 输入框就是一个非受控组件,因为其值由 DOM 自己维护。

在开发过程中,通常建议使用受控组件来处理表单元素等需要控制输入的组件,因为这种方式可以更好地控制数据的流动和验证。但是对于一些简单的表单元素,非受控组件可能会更加方便和快速。

我们下面将通过收集表单案例-登录,来演示受控组件和非受控组件。

2.2 登录示例-非受控

示例代码如下:


1001_非受控组件

点击效果:在这里插入图片描述

2.3 登录示例-受控

示例代码如下:


1001_非受控组件

效果示例如下图2.2-1所示:

在这里插入图片描述

3 高阶函数

高阶函数:高阶函数是一种函数,可以接受一个或多个函数作为参数,或者返回一个函数作为输出。这种函数通常用于将代码重复使用,并增加代码的可读性

在上面登录案例中,我们的表单只有2个数据需要维护,如果是注册,还需要维护手机号、邮箱、年龄、性别、住址等等信息,如果每个数据都需要一个回调函数,代码就会很繁琐。

观察发现回调函数处理逻辑都是一样的,只是属性名不同,我们可以通过传递属性名,使用同一个回调函数实现属性值的设置。

修改上面示例代码如下3-1所示:


1101_高阶函数-函数柯里化
  • 我们之前学习的react事件处理函数形式Onxxx={this.yyy},我们这里是函数执行,是不是错了?
    • 事件处理函数需要的一个回调函数,可以是直接函数,也可以是函数执行返回的“结果”(结果也是函数)。
  • 为什么我们事件对象e放在了回调函数中返回函数参数中,而不是回调函数中?
    • React把事件对象传给具体的直接回调执行函数,即我们事件反生时执行哪个回调函数,就把参数传递给那个函数。
    • 上面示例中saveFormData在组件实例化第一次执行render时就执行了;后续执行render时,实际执行回调的是return匿名函数。

常见的高阶函数:

  • Promise
  • setTimout、setInterval
  • map、filter、reduce

4 函数柯里化

函数柯里化:通过函数调用继续返回函数的方式,实现多次接受参数统一处理的函数编码方式。

示例代码如下4-1:


5_演示函数柯里化


5 React函数的非柯里化

在上面示例代码中

 saveFormData = (type) => {return (e) => this.setState({[type]: e.target.value})}

saveFormData属于函数柯里化,因为我们没办法同时接收这两个参数,如何使用非柯里化简化该函数呢?

此时需要修改传参方式,我们可以修改为箭头函数:

  • 我们需要交给事件处理一个函数作为回调
  • 我们需要同时接收两个参数,一个自定义参数,一个时间处理传递的参数

修改如下:


1101_高阶函数-函数柯里化

示例效果如下图5-1所示:在这里插入图片描述

后记

❓QQ:806797785

⭐️源代码仓库地址:https://gitee.com/gaogzhen/react-study

参考:

[1]尚硅谷React教程(2022加更,B站超火react教程)[CP/OL].2020-12-15.p32-p36.

[2]chatgpt

相关内容

热门资讯

一文读懂强化学习! 一.了解强化学习1.1基本概念强化学习是考虑智能体(Agent)与环境&...
Spring Cloud之一:... 目录 环境 Eureka工程的创建步骤 系列目录(持续更新。。。) S...
golang实现守护进程(2) 前言golang实现守护进程,包含功能:1. 守护进程只创建一次2. 平...
url 格式详解 统一资源定位系统(uniform resource locator; url ...
elasticsearch7.... elasticsearch版本:7.17.3 目标:实现对类型为text...
SpringBoot 加载系统... 开发环境: IDEA 2022.1.4+ MyBatis         代码参考:spri...
交换机概念和知识和命令 目录 一、华为交换机基础学习的一些重要概念和知识 二、交换机常用命令大全 三、不常用的交换机命令 ...
什么是 JavaScript ... 本文首发自「慕课网」,想了解更多IT干货内容,程序员圈内热闻࿰...
【C++】C++11——lam... 文章目录一、Lambda表达式引入二、Lambda表达式语法三、Lambda表达式交换两个值四、La...
Java分布式事务(十) 文章目录🔥分布式架构的理论知识_BASE理论🔥分布式事务解决方案_最...
vmware中centos7实... 前言 在开发收银系统SAAS版本时,采用的是centos服务器,经常需要...
计算机图形学 | 可编程渲染管... 计算机图形学 | 可编程渲染管线计算机图形学 | 可编程渲染管线3.1 从固定到可编程图形编程的发展...
linux下安装两个或多个to... 安装jdk,tomcat编辑环境变量profilevi /etc/profile加入以...
selenium的显示等待、隐... 关于selenium有三种等待方式,分别为显示等待、隐式等待、强制等待 1、强制等待 ...
测牛学堂:软件测试接口自动化之... requests库 用postman进行接口测试有一定的限制,我们测试更应该掌握的是用...
day36_jdbc 今日内容 上课同步视频:CuteN饕餮的个人空间_哔哩哔哩_bilibili 同步笔记沐沐霸的博客...
【java基础】Stream流... 文章目录基本介绍流的创建流的各种常见操作forEach方法filter方法map方法peek方法fl...
幂等性通用组件 一、什么是幂等性幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,...
Nacos服务注册 又是美好的一天呀~ 个人博客地址: huanghong.top 本文预估阅读时长为3...
令人惊艳的ChatGPT项目,... 自从 ChatGPT、Stable Diffusion 发布以来,各种相关开源项目百花...
舆情监测系统有哪些优势,TOO... 舆情监测系统是一种基于大数据技术的舆情分析工具,可以帮助企业、政府等机构实时监控公众对...
【Linux】基础IO流(上) 文章目录1. 预备知识2. 回忆C接口fopenfputsfprintfsnprintf追加方式——...
设计模式(二十七)----行为... 1 概述 如上图,设计一个软件用来进行加减计算。我们第一想法就是使用工具类ÿ...
精心整理前端主流框架学习路径 版权声明 本文原创作者:谷哥的小弟作者博客地址:http://blog....
typescript声明 前言 “d.ts”文件用于为 TypeScript 提供有关用 JavaScript 编写的 API...
HashMap源码分析 Java源码系列:下方连接 http://t.csdn.cn/Nwzed 文章目录...
一、基础算法3:二分 模板题+... 文章目录算法模板整数二分算法模板浮点数二分算法模板模板题数的范围原题链接题目题解数的三次方根原题链接...
Essential C++复习... 好久没写代码了,很多东西都忘记了。复盘一下C++编写基础头文件 与 输...
三十五、DRF中的过滤、Dja... 一、DRF中的过滤 REST framework 的通用列表视图的默认行为是返回模型管理器的整个查询...
基于RZ/G2UL Corte... 以太网接口是一种广泛应用的网络接口,它可以在不同的场合实现不同的功能。例如࿰...