ReactHook技巧

news2024/11/26 14:52:56

ReactHook技巧

文章目录

    • ReactHook技巧
    • 一 概念
    • 二 useState
    • 三 useEffect
      • 3.1 无需清除副作用(**Effect**)
      • 3.2 需要清除副作用(**Effect**)
      • 3.3 控制(**Effect**)调用次数

一 概念

1.什么是hook?

2.为什么要用hook?

-: 为函数组件提供状态管理能力, 扩展
-: 在Function组件中勾入更多React 特性, 以use开头

二 useState

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qcvXgPA7-1669130695588)(micro%20_frontend/img/image-20221122232339894.png)]

./components/LikeButton.tsx

// rafc  tsrafe
import React, { useState } from 'react'

const LikeButton: React.FC = () => {
    const [like, setLike] = useState(0)
    const [on, setOn] = useState(true)

    return (
        <div>
            <button onClick={() => setLike(like + 1)}>
                {like} 👍
            </button>
            <button onClick={() => setOn(!on)}>
                {on ? 'ON':'OFF' }
            </button>
        </div>
    )
}

export default LikeButton

改变函数内组件状态,在每次组件更新时候, 记住状态值

三 useEffect

纯函数:输入确定, 输出确定,无副作用

副作用:网络请求,手动dom操作,订阅数据来源, … 与纯函数界面渲染不同

两种场景:

    1. 无需清除副作用(Effect)
    1. 需要清除的副作用

3.1 无需清除副作用(Effect)

实现: 使用useEffect 修改DOM 完成标题更新

class实现:

在这里插入图片描述

hooks实现:

// rafc  tsrafe
import React, { useEffect, useState } from 'react'

const LikeButton: React.FC = () => {
    const [like, setLike] = useState(0)
 ...
    useEffect(()=>{//渲染和更新时候执行.
        document.title = `点击了 ${like}`
    })

    return (
        <div>
            <button onClick={() => setLike(like + 1)}>
                {like} 👍
            </button>
          ...
        </div>
    )
}

export default LikeButton

3.2 需要清除副作用(Effect)

dom操作需要清除监听, 防止内存泄漏,卡顿页面

实现: 使用useEffect 完成鼠标跟踪器(鼠标移动时候显示鼠标位置)

原理:挂载document上, 点击click,修改state,当前值

在这里插入图片描述

class实现:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-H70K1K3G-1669133553231)(ReactHooks/image-20221122235414537.png)]

hooks实现:// 无依赖时候, 会多次重复调用effect 注册,执行

import React, { useEffect, useState } from 'react'

const MouseTracker: React.FC = () => {
    const [position, setPosition] = useState({ x: 0, y: 0 })

    useEffect(() => {
        console.log('add effect',position.x);

        const updateMouse = (e: MouseEvent) => {
            console.log('inner');
            setPosition({
                x: e.clientX,
                y: e.clientY
            })
        }

        document.addEventListener('click', updateMouse)
        return () => {
            console.log('remove effect',position.x);

            document.removeEventListener('click', updateMouse)

        }
    })

    console.log('before render',position.x);
    return (
        <div>
            X :{position.x} {` `} Y :{position.y}
        </div>
    )
}

export default MouseTracker

*忘记react声明周期,重新接触react effect,发现每次渲染都会调用effect(有些浪费), 思考如何规避多次调用------>控制effect调用次数

3.3 控制(Effect)调用次数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/27486.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常用的国际物流运输方式有哪些

目前我国从事跨境电商行业的人才众多&#xff0c;不仅促进了我国外贸业务的活力&#xff0c;也促进了国际物流业的发展。国际货贸运输涉及陆运物流、海运物流、空运物流、管道物流、多式联运物流、邮运物流等多种运输方式。一、陆运物流 陆运物流含公路和铁路联运物流&#xff…

C语言百日刷题第十天

前言 今天是刷题第10天&#xff0c;放弃不难&#xff0c;但坚持一定很酷~ 快来跟我一起刷题吧。 C语言百日刷题第十天前言81.连接两个字符串82.输入一行字符&#xff0c;分别统计其中英文字母、空格、数字和其他字符的个数。83.写一个排序函数实现数组从小到大的排序84.字母的大…

SPARKSQL3.0-DataFrameAPI与spark.sql()区别源码分析

一、前言&#xff1a; 阅读本节需要先掌握spark-sql内部执行的基本知识&#xff1a; SessionState Unresolved阶段 Analyzer阶段中queryExecution的介绍 二、区别 spark.sql的执行顺序为: sql字符串 -> antlr4解析成AST语法树 -> unreolved解析成logicalPlan ->…

云计算正当时!将你的Java项目容器化

将您的 Java 应用程序 Docker 化 长按关注《Java学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 扫码关注《Java学研大本营》&#xff0c;加入读者群&#xff0c;分享更多精彩 随着每个人都转向 Kubernetes&#xff0c;知道如何对应用程序进行 Dockerize 是件好…

IPv6转换难点分析之一:国家监测指标-中科三方

从IPv4过渡到IPv6就像是“打破一个旧世界&#xff0c;创建一个新世界”&#xff0c;注定要经历一个长期的过程&#xff0c;但终究会实现。 一、IPv6过渡转换的障碍 目前互联网上还是以IPv4设备为主&#xff0c;不可能迅速过渡到IPv6&#xff0c;这主要受制于以下几个方面: &…

Nat. Mach. Intell2021 | MolCLR+:基于GNN的分子表征对比学习

原文标题&#xff1a;Molecular Contrastive Learning of Representations via Graph Neural Networks 代码&#xff1a;https://github.com/yuyangw/MolCLR 一、问题提出 首先&#xff0c;分子信息难以完全表示。例如&#xff0c;基于字符串的表示&#xff0c;如SMILES和SE…

未来展望:Starday供应链火力全开,为跨境电商再添动力!

2022年末将至&#xff0c;回顾这“命途多舛”的一年&#xff0c;也是令人非常唏嘘。近日&#xff0c;联合国发布《2022年年中世界经济形势与展望》报告&#xff0c;该报告指出正处于疫情恢复期的全球经济可能又到了一场新危机的边缘。据相关统计显示&#xff0c;2022年相比于20…

HttpServlet学习中的常见问题(个人珍藏笔记)

目录 一、HttpServlet 1.1核心方法 1.2、面试&#xff1a;谈谈Servlet的生命周期 二、HttpServletRequest 2.1、核心方法 2.2、如何获取请求头 三、HttpServletResponse 3.1核心方法 四、setCharacterEncoding和setContentType区别&#xff1f; 五、Json格式的转换问题…

串行通讯协议,只需要一文就可以给你讲懂

前言 最近在做一个通过ESP8266和STM32通讯从而实现远程控制&#xff0c;中间需要用到串口来发送报文&#xff0c;通过报文来实现两者之间的通讯。 今天刚好趁着这个机会来给大家讲解一下串行通讯&#xff0c;希望能给大家以后的学习提供一些思路。 串行通讯介绍 串口通信线…

磨金石教育摄影干货分享|怎样拍出唯美有内涵的“中国风”照片

之前有网友私聊我&#xff0c;说这两年很多人都在拍中国元素的照片&#xff0c;他们的照片不仅仅是对古建筑简单的拍摄&#xff0c;照片的内容拥有丰富的文化内涵。想问我这样的照片应该怎么拍才能达到有内涵的水平。 其实这个问题确实有一定的难度&#xff0c;每个人都有自己…

腾格尔成影视圈的香饽饽,十月天传媒正式邀请演唱主题曲

俗话说&#xff1a;姜还是老的辣&#xff0c;酒还是陈酿好。这句话用到音乐人腾格尔身上&#xff0c;就再贴切不过了。说起音乐人腾格尔&#xff0c;这位来自草原的雄鹰和苍狼&#xff0c;有很多部音乐作品&#xff0c;都被歌迷朋友们一直传唱。 如今的腾格尔老师&#xff0c;已…

六.初阶指针

前言&#xff1a;大家好哇&#xff01;今天带大家认识下C语言中的指针&#xff0c;指针的用法等&#xff0c;希望对大家有所帮助&#xff01; 目录 一.指针是什么 1.指针是什么&#xff1f; 2.如何理解指针变量 二.指针和指针的类型 1.指针类型 2.指针类型的意义 &#x…

http 跨域资源共享详解

http 跨域资源共享详解 由于浏览器同源策略限制&#xff0c;会导致出现跨域问题。而跨域资源共享&#xff08;CORS&#xff09;可以突破浏览的同源策略的限制&#xff0c;不过需要服务端配合设置相应的响应头&#xff0c;从而使跨源数据传输得以安全进行。 跨域资源共享新增了…

进销存软件对中小型企业管理有什么作用?

进销存软件对中小型企业管理有什么作用&#xff1f; 01 更加有序 库存不乱单据不乱价格不乱 使用进销存软件可以把这些都记录下来&#xff0c;有条不紊&#xff0c;出现什么问题也有据可查&#xff0c;不像纸质单据&#xff0c;会丢会坏&#xff0c;乱成一团。 02 能打印正式…

[Spring Cloud] Hystrix通过配置文件统一设置参数/与OpenFeign结合使用

✨✨个人主页:沫洺的主页 &#x1f4da;&#x1f4da;系列专栏: &#x1f4d6; JavaWeb专栏&#x1f4d6; JavaSE专栏 &#x1f4d6; Java基础专栏&#x1f4d6;vue3专栏 &#x1f4d6;MyBatis专栏&#x1f4d6;Spring专栏&#x1f4d6;SpringMVC专栏&#x1f4d6;SpringBoot专…

网站favion.ico图标

Favicon.ico一般用于作为缩略的网站标志&#xff0c;它显示在浏览器的地址栏或者标签上。 目前主要的浏览器都支持favicon.ico图标 一 制作favicon图标 1 把品优购图标切成png图片 2 把png图片转换为ico图标&#xff0c;这需要借助第三方转换网站&#xff0c;例如&#xff1…

刷题经验分享(一)

文章目录删除公共字符&#xff1a;组队竞赛&#xff1a;删除公共字符&#xff1a; 第一题&#xff1a;删除公共字符 方法一&#xff1a; 思路&#xff1a; 1.将第二个字符串的字符都映射到一个hashtable数组中&#xff0c;用来判断一个字符在这个字符串。 2. 判断一个字符在第…

140.深度学习分布式计算框架-3

140.1 Horovod Horovod是 Uber 开源的又一个深度学习工具&#xff0c;它的发展吸取了 Facebook「一小时训练 ImageNet 论文」与百度 Ring Allreduce 的优点&#xff0c;可为用户实现分布式训练提供帮助。Horovod 支持通过用于高性能并行计算的低层次接口 – 消息传递接口 (MPI…

Vue脚手架环境中简单使用MarkDown(只入门)

目录 入门 高级使用 入门 1 所在终端输入 npm install vue-meditor 2 复制以下代码 先新建一个组件 <template><div><MavonEditor v-model"myMarkDownData"/><button click"submit">提交</button></div> </te…

vue配置

首先安装node.js 在cmd node -v查看 然后 cmd命令行执行 : npm install -g vue/cli // 加-g是安装到全局 安装vue cli 安装vue cli 1 看一下 这是在cmd输入的内容,参考第一条链接 在vscode中怎么配置他? 文件-打开文件夹,选择一个文件夹 这里是firstvue 在下面新建文件夹…