React入门之ReactHooks基本使用

STM32_WS2811驱动 STM32的WS2811驱动 阅读详情

之前我们谈到React的生命周期,里面有三个比较常用的钩子函数,分别是:

  • componentDidMount():会在组件挂载后(插入 DOM 树中)立即调用。依赖于 DOM 节点的初始化应该放在这里。如需通过网络请求获取数据,此处是实例化请求的好地方
 
  • componentDidUpdate():会在更新后会被立即调用。首次渲染不会执行此方法。
 
  • componentWillUnmount():会在组件卸载及销毁之前直接调用。在此方法中执行必要的清理操作,例如,清除 timer,取消网络请求或清除在 componentDidMount() 中创建的订阅等。

在这里插入图片描述

但函数组件没有生命周期,如果想要在页面渲染或更新时执行某些操作,可以使用Hooks的useEffect来完成

下面是一个小例子:

当页面加载或重新渲染(数据更新)时,打印出提示语

引入:

import React, { useState, useEffect } from ‘react’

使用:

// 当页面加载或重新渲染时,打印提示语

useEffect(()=>{

console.log(“useEffect正在执行中。。。”)

})

效果:

当页面刷新时,打印一次;

当添加了书目时,又打印了一次:

在这里插入图片描述

不论是哪个数据更新,都会触发useEffect的执行。如果希望useEffect只追踪某几个变量的变化,可以在useEffect的第二个参数中,传入一个数组;当数组中的变量发生改变时,useEffect就会执行

先来看看多个state时,其中一个state更新,useEffect的反应(同一个组件中可以多次使用useState)

// 另起一个用来存储年龄的state(允许多次使用useState)

const [age, setAge] = useState(22);

// 更新age

const handleClick = ()=>{

setAge(age+1);

}

// 当页面加载或重新渲染时,打印提示语

useEffect(()=>{

console.log(“useEffect正在执行中。。。”,age)

})

创建一个button按钮,点击一下,就修改age:

点击一下年龄+1

效果:

此处我修改了useEffect的输出函数,多加了年龄的打印,这样看得更清楚些。可以看到,无论是修改age还是添加书目,都会触发useEffect

在这里插入图片描述

然后,我们使用useEffect的第二个参数,限定useEffect的使用范围

// 添加第二个参数,当book更新时,才触发打印

useEffect(()=>{

console.log(“useEffect正在执行中。。。”,age)

},[ books ])

效果:一开始页面加载,useEffect会先执行一次;然后我点击增加age,点击两次,都是没有打印输出的(但age有在修改,点击两次,age值为24);最后我添加了书目,才有了打印。可见,限制useEffect的使用范围已生效

在这里插入图片描述

我们还可以在useEffect中将输入的书目进行本地存储

[](()本地存储:localStorage

从文本框输入的书名,网页刷新后就不见了。如果我们存储起来,刷新的时候也能展示新输入的书目

  • 每次数据更新时都存到localStorage:

// 本地存储 BookList.js

useEffect(()=>{

// console.log(“useEffect正在执行中。。。”)

localStorage.setItem(“books”, JSON.stringify(books));

},[ books ])

  • 刷新页面时从localStorage中取出之前的数据,如果第一次加载,就展示初始化的书目即可(也就是《我们仨》《我的阿勒泰》《蒋勋说<红楼梦>》三本书):

// 刷新页面时从localStorage中取出之前的数据

const [books, dispatch] = useReducer(BookReducer, initBooks, ()=>{

const result = localStorage.getItem(‘books’);

return result ? JSON.parse(result) : initBooks

})

效果:

  1. 一开始加载页面,展示初始化的三本书;

  2. 然后我加了一本书名,页面展示4本书名;

  3. 最后我点击左上角的刷新,4本书名还在

在这里插入图片描述

[](()useContext的使用


接着是useContext。

Context-API获取props数据,有两种方法:

  • 一种是通过contextType,只能获取离该组件最近的context,且函数组件不能使用;

  • 另一种是consumer,需要包裹住想要渲染的标签,可以获取多个context。

上一篇文章中,我们嵌套使用多个context时,代码是这样的:

在这里插入图片描述

代码稍微长了一点

如果用useContext,就会简洁很多

import React, { Component,useContext } from ‘react’

import { ThemeContext } from ‘…/contexts/ThemeContext’;

import { GreetingContext } from ‘…/contexts/GreetingContext’;

const Navbar = ()=>{

const greetingContext = useContext(GreetingContext); // GreetingContext使用

const themeContext = useContext(ThemeContext); // ThemeContext使用

const { isAGirl, toggleGreeting } = greetingContext;

const { isLightTheme, light, dark } = themeContext;

const theme = isLightTheme ? light : dark;

return (

Context App

{ isAGirl ? ‘hello,girl~’ : ‘hello,boy~’}

    • Home
    • About
    • Contact
    • )

      }

      export default Navbar;

      [](()useReducer的使用


      我们知道,除了context,还有一种方法可以统一管理数据,那就是redux。redux提供了一个store来管理数据,而数据的更新,是交由reducer来执行的,ReactHooks也提供了这样的方法——useReducer,可以统一管理数据,增强代码的可维护性和可读性

      在useState的例子中,我们把数据的存储、数据的修改方法都写在了使用数据的组件里,这个组件既要管理数据,又要展示数据。我们可以使用useContext来抽离数据,用useReducer抽离数据的更新操作,不论哪个子组件,都能调用dispatch派发action行为,就像这样:

      BookReducer.js文件中设置action

      import React from ‘react’

      import {v4 as uuidv4} from ‘uuid’

      const BookReducer = (state, action)=>{

      switch (action.Type){

      case “ADD_BOOK”:{

      return […state,{title:action.book.title, id:uuidv4()}]

      }

      }

      }

      export default BookReducer;

      BookList.js文件中接收,并把dispatch传递给子组件AddBook去使用

      import React, { useState, useEffect,useContext,useReducer } from ‘react’

      import AddBook from ‘./AddBook’

      import {v4 as uuidv4} from ‘uuid’

      import { BookContext } from ‘…/context/BookContext’

      const BookList = () => {

      const {books, dispatch} = useContext(BookContext);

      // 当页面加载或重新渲染时,打印提示语

      useEffect(()=>{

      console.log(“useEffect正在执行中。。。”)

      },[ books ])

      return (

      {/* 展示数据:书目 */}

        {books.map(book => {

        return (

      • {book.title}
      • )

        })}

        {/* 将更新书目的方法传递给子组件,让子组件执行 */}

        {/* */}

        )

        }

      JavaScript实现边缘检测Canny(附完整源码) 阅读详情

      相关推荐

      HDMI协议介绍(一)--Overview

      HDMI全称(High Definition Multimedia Interface)高清多媒体接口,支持在单线缆上传输全数字高清视频和多声道音频。

      SlamDunk的博客 2万+

      关于React的正确打开方式(一)

      关于React的正确打开方式(一)

      专注在前端的路上人 4366

      使用Python进行核磁数据预处理

      随着医学与人工智能技术的快速崛起,伴随算法算力、数据等关键要素的积累和突破,人工智能技术在精准医学领域的科研应用也随之飞快增长,相关科研成果和学术论文数量逐年激增,医学影像人工智能涉及的技术如图像分割、病灶识别、病灶自动勾画、影像组学、深度学习模型构建和临床信息解析越来越趋于分析流程化,模块化,帮助越来越多的医生在临床科研实践中获得突破性的进展。根据具体的应用和数据类型,你可能需要调整或添加额外的步骤。对于更高级的处理,如图像分割或NMR数据的复杂处理,你可能需要查阅更专业的文献或使用更专业的软件工具。

      xhlo521的博客 3132

      React 生命周期

      React 生命周期 1、生命周期图 react生命周期函数挂载、卸载只会执行一次,更新会执行多次。 2、生命周期的三个阶段 1)挂载时(创建) 执行时机:组件创建时(页面加载时) 执行顺序:Constructor() --> render() --> componentDidMount() 钩子函数 触发时机 作用 constructor () 创建组件时 1,初始化state; 2.为事件处理程序绑定this render () 每次组件渲染都会触发 渲染UI(

      1234Wu--前端Blog 1845

      课设:FPGA音频均衡器 verilog设计及仿真 加报告

      未来,随着FPGA技术的进一步发展和应用场景的扩大,FPGA音频均衡器将发挥出更大的作用,并为音频领域带来更多创新和突破。(a)音乐制作:均衡器可以调整音频信号中不同频段的能量分布,使得乐器声音更加明亮、动感,从而提升音乐制作的质量和创作的灵活性。以上步骤提供了设计一个音频均衡器的大致过程,但值得注意的是,具体实现的细节和复杂度可能因设计要求和所使用的平台而有所不同。确保设计满足预期的性能和要求。确定均衡器的功能和要求:定义你的音频均衡器需要实现的功能,包括频率范围、增益范围以及可调参数数量等。

      QQ_778132974的博客 1588

      【Go语言实战】(2) Gin+Vue 电子商城

      618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

      面向生活编程 4827

      react页面刚加载,方法自己执行N次

      今天写代码,遇到一个问题,我写了一个onClick事件,我刚劲=进到页面,发现这个方法自动促发了50次,然后页面报错,说组件执行太多次。 原因是:在react中指定this指向有俩种方式。 第一种:直接在方法上绑定this或者使用箭头函数 this.add.bind(this) ()=>this.add() 方法直接可以写成 add(){} 第二种:调用方法的地方写成 this.add() 方法用箭头函数 add=()=>{} 如果你使用了第二种就会出现我今天遇到的情况,所以建议使用第一种。

      liuxi_happy的博客 1887

      计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet

      计算机视觉卷积神经网络(CNN)基础:从LeNet到ResNet,在计算机视觉领域,卷积神经网络(Convolutional Neural Network,CNN)已然成为推动众多任务发展的核心力量。从早期简单的图像识别,到如今复杂的目标检测、语义分割、图像生成等任务,CNN 都展现出了卓越的性能。CNN 的发展历程见证了一系列经典模型的诞生,其中 LeNet 作为开山之作,为 CNN 的发展奠定了基础,而 ResNet 则通过创新性的设计,突破了传统神经网络的限制,使得网络能够构建得更深、性能更优。

      不踩坑,不知道坑有多深;不总结,踩过的坑白踩。 14万+

      React Hooks - useEffect通俗易懂

      一、React 使用Effect Hook 二、 (1)useEffect():当每次组件数据改变,页面渲染后会执行一次 (2)useEffect(()=>{}, [ ]),当第二个参数是空数组时,即 只有第一次页面渲染之后才会执行这个useEffect这个函数;后面页面渲染就不执行; (3)useEffect (()=>{}, [id,id1,id2 ]),第一次页面渲染之后会执行这个useEffect这个函数; 空数组有依赖项,则当id,或者id1等数据改变时,页面渲染之后就执行这个函数

      wangbaobao512的博客 1705

      小米15修复“NV损坏” 去除主板校验电阻步骤解析与图示

      小米15系列将搭载骁龙8至尊版处理器,采用台积电3nm工艺。文章分析了手机出现"NV损坏"故障的表现及修复方法,包括通信异常、系统启动问题等典型症状,并介绍了去除主板校验电阻和刷写工程固件两种修复方案。重点讲解了去除主板电阻后刷写QCN文件的操作流程,强调在维修过程中需要结合分析与思考。适用于小米15系列特定机型(24129PN74G/I/C)的硬件修复。

      小马哥的专栏 313

      Linux安装Docker(图文解说详细版)

      第一步,下载docker 下载地址: https://download.docker.com/linux/static/stable/x86_64/ 这次的演示我们使用docker-18.06.3-ce.tgz 这个版本 第二步,上传到云服务器上面 使用rz命令上传或者fltp工具进行上传 第三步,解压文件 第四步,将解压出来的docker文件复制到 /usr/bin/ 目录下 这么做的目的是将docker交给linux自己去管理,类似spring中的ioc(猜测,非正经知识) cp docker

      编码人生 1万+

      react之旅(四)react 如何调用方法;获取数据;改变数据;方法传值

      本文主要讲解react组件中如何定义方法,调用方法,获取数据,改变数据,方法传值,调用方法时改变this指向。 一、react中调用方法 import React from 'react'; class Demo1 extends React.Component { constructor(props){ super(props); } runFun() { console.log("runfun"); } render(){

      letianxf的博客 9390

      数学建模模型总结

      这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

      React入门之ReactHooks基本使用,源码解析

      const [books, setBooks] = useState([{ title: ‘我们仨’, id: 1 },{ title: ‘我的阿勒泰’, id: 2 },{ title: ‘蒋勋说《红楼梦》’, id: 3 }])然后我们就可以使用来获取数据,使用来更新数据// 使用setBooks更新数据,即增加书目// params:title 书名const addBook = (title)=>{setBooks([…books,{title, id:uuidv4()}])}return ({/*

      2301_79987255的博客 1105

      华为的C语言编程规范.pdf

      华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

      假人有限元模型

      假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

      React快速入门(四)ReactHooks

      React是由Facebook开发的一款JavaScript库,用于构建用户界面。它采用组件化的方式进行开发,支持虚拟DOM技术,能够有效提高页面渲染性能。React具有易于学习、灵活、高效等特点,被广泛应用于Web应用和移动应用的开发中。本文对React的hooks进行了概括说明。

      会思想的苇草i的博客 1235

      NTscan扫描工具

      ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

      2024年Web前端最全React入门之ReactHooks基本使用,2024年最新腾讯面试比例

      除了简历做到位,面试题也必不可少,整理了些题目,前面有117道汇总的面试到的题目,后面包括了HTML、CSS、JS、ES6、vue、微信小程序、项目类问题、笔试编程类题等专题。但函数组件没有生命周期,如果想要在页面渲染或更新时执行某些操作,可以使用Hooks的useEffect来完成下面是一个小例子:当页面加载或重新渲染(数据更新)时,打印出提示语引入:使用:// 当页面加载或重新渲染时,打印提示语console.log(“useEffect正在执行中。。。

      2401_84447233的博客 1065

      2024年React入门之ReactHooks基本使用(1),阿里巴巴前端面试都问些什么

      开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】世界上只有一种真正的英雄主义就是在认清生活真相之后仍然热爱它就像这样:{ title: ‘我们仨’, id: 1 },{ title: ‘我的阿勒泰’, id: 2 },{ title: ‘蒋勋说《红楼梦》’, id: 3 }])然后我们就可以使用books来获取数据,使用setBooks来更新数据// 使用setBooks更新数据,即增加书目// params:title 书名return (

      2401_84437095的博客 727

      React教程(由浅到深)

      1.params参数路由链接(携带参数):<Link to='/demo/test/tom/18'}>详情</Link>注册路由(声明接收):<Route path="/demo/test/:name/:age" component={Test}/>`接收参数:this.props.match.params2.search参数路由链接(携带参数):<Link to='/demo/test?name=tom&age=18'}>详情</Link>

      web$-小白 3万+

      耗时 359 天的 React 官方全新文档正式上线

      好消息,在2023年3月16号 react 官方全新文档正式上线了。距离上一次React 新文档的 Beta 版(2022年3月22)上线,文档重写耗时359天。可以想象一下,react 团队对文档的重视程度。与此同时,react 全新文档已启用新的域名:https://react.dev/。react 的粉丝们学习React 看文档,别跑错地方了。由于时间的关系,react 官方全新文档还没有...

      前端达人 647

      PHP-Frameworks-Bench 项目使用教程

      PHP-Frameworks-Bench 项目使用教程 1. 项目介绍 PHP-Frameworks-Bench 是一个用于对 PHP 框架进行基准测试的开源项目。该项目旨在测量 PHP 框架在实际应用中的最小开销(最小启动成本),不包括模板引擎、数据库操作和调试信息的成本。基准测试的范围不包括模板引擎或 ORM/数据库库等组件。 该项目通过 Docker 容器和一系列脚本,帮助开发者快速启动并运...

      gitblog_00023的博客 434

      完整React入门指南v8教程

      **完整React入门指南v8** 是由Brian Tholt维护的一个开源项目,旨在为React初学者提供一个全面且深入的学习资源。这个版本特别针对React的最新特性进行了更新,通过实际的编码示例,它引导开发者从零基础开始,逐步掌握React框架的核心概念、状态管理以及与之相关的现代前端开发最佳实践。 ## 项目快速启动 要快速启动此项目,首先确保你的系统已经安装了Node.js。然后,遵...

      gitblog_00014的博客 798

      react入门以及react-hooks项目实战

      这是一个使用react构建的渐进式学习项目,项目地址:github.com/Ljhhhhhh/re…,欢迎您的交流学习,希望各位大佬能多给意见。非常感谢。 项目版本技术栈 基础版本(version1分支) 基础版本的技术栈为 React+react-router(v4)+redux+react-redux+antd hooks版本(withHooks分支) hooks版本是在基础版本之上,利用re...

      weixin_33775582的博客 3920

      React 源码解析 - ReactHooks 解析、什么是ReactHooks、ReactHooks 如何使用

      这是 React 源码解析系列第一篇文章,系列文章基于 v16.8.6版本。 Hooks 是 React 16.8 的新增特性。它可以让你在不编写 class 的情况下使用 state 以及其他的 React 特性。 Hooks 非常简单,比如 useState 可以在 function component 中获取、设置 state 等等。

      止水聊技术 843

      react基础之reactHooks

      创建可复用的逻辑。

      肥晨开发的学习之路 1050

      ReactHooks的基本使用

      我们知道,函数式组件是没有状态绑定,生命周期等特性的,为此,衍生出了hooks钩子函数,来弥补函数式组件的不足。 一、userState():状态钩子 这里,将用函数式组件,实现如下的user的获取渲染。 1、导入useState关键字,利用useState设置初始值,并且解构出变量名和操控变量的方法函数。 2、渲染页面,绑定状态。 3、利用绑定的方法,修改state。 如此,便可以实现state的改变。完整代码如下。 import React,{ useState,} ..

      m0_58426119的博客 807
      上一篇: Python面试题大全(三)
      下一篇: HTML5基础认知
      宇小哥
      博客等级 码龄5年 4粉丝 56原创
      评论
      成就一亿技术人!
      拼手气红包6.0元
      还能输入1000个字符
       
       条评论被折叠 查看
      添加红包

      请填写红包祝福语或标题

      个

      红包个数最小为10个

      元

      红包金额最低5元

      当前余额3.43元 前往充值 >
      需支付:10.00元
      成就一亿技术人!
      领取后你会自动成为博主和红包主的粉丝 规则
      hope_wisdom
      发出的红包
      实付元
      使用余额支付
      点击重新获取
      扫码支付
      钱包余额 0

      抵扣说明:

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

      余额充值