当前位置: 首页 > news >正文

React学习-hooks

官方文档:https://zh-hans.react.dev/reference/react/useActionState

1.useEffect(setup, dependencies?)

1.1 基础使用

//hooks
import { useEffect } from "react";
import "./App.css";function App(){useEffect(()=>{console.log('useEffect loading');})return ( <h1>app</h1>)
}export default App;

执行时机:
1,组件初始化
2,组件更新后执行(在dom更新之后执行)

1.2 传入依赖项时 []

  //第一个参数回调函数,组件初始化执行,组件更新后也会执行useEffect(()=>{console.log('useEffect loading');},[])

执行时机:
组件初始化、挂载

1.3 传入依赖项时 [a]

useEffect可以监听到useState的状态变化
(如果依赖项中传入多个值[a,b,c],只有有其中之一变化都会执行useEffect。或的关系)

import { useEffect, useState } from "react";
import "./App.css";function App() {const [count, setCount] = useState(0);//第一个参数回调函数,组件初始化执行,组件更新后也会执行useEffect(() => {console.log("useEffect loading");console.log(count);// return () => {//   console.log('return 的函数在卸载的时候执行');// }}, [count]);const btn = () => {setCount(count + 1);};return (<div><h1>hooks</h1><h1>{count}</h1><button onClick={btn}>add</button></div>);
}export default App;

在这里插入图片描述

执行时机:
1,组件初始化、挂载
2,依赖项的状态变化时

1.4 第二个参数不传

第二个参数不传,会将所有定义的state值收集起来,只有有一个值变化了就会执行useEffect
在这里插入图片描述

1.5 返回的函数 ☆

执行时机:
1,组件卸载的时候
2,状态发生变化时

  useEffect(() => {console.log("useEffect loading",count);//变化后的数据return(()=>{//return 中的值是变化之前的数据console.log('return!!',count);})});

在这里插入图片描述

应用场景:用于聊天的卸载

用户我跟多个人聊天的场景:

伪代码:
跟用户A

function Bpp(){useEffect(() => {//userAconnect(userA)return(()=>{console.log('return!!');})},[userA]);
}

离开A页面,到用户B

function Bpp(){useEffect(() => {//userBconnect(userB)return(()=>{//userAconsole.log('return!!');//断开A的连接disconnect(userA)})},[userB]);//A-->B
}

2.useState

const [state, setState] = useState(initialState)

import {  useState } from "react";
import "./App.css";function App() {const [count, setCount] = useState(0)const btn=()=>{setCount(count+1)}return ( <div><h1>hooks</h1><h1>{count}</h1><button onClick={btn} >add</button></div>)
}
export default App;

在这里插入图片描述

面试题

react的更新是同步还是异步的?为什么?

异步,因为react更新底层的(微任务)异步队列,会将短时间内js对组件的更新合并,1次渲染完成更新。

useEffect的执行时机?

看第一点

useEffect的返回函数执行时机

1,组件卸载的时候
2,状态发生变化时

应用场景:用于聊天的卸载

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【多线程】概述
  • 安全检查报告模板
  • 用c写一个谁考了第k名
  • Maptr
  • 2024数博会技术成果回顾 | KPaaS助力企业数智化转型
  • .net通过类组装数据转换为json并且传递给对方接口
  • 基于Spring和MybatisPlus下的Oracle转mysql语句语法适配修改
  • 使用Aqua进行WebUI测试(Pytest)——介绍篇(附汉化教程)
  • 合并区间【leetcode】
  • 随笔(1)将 CSV 文件导入 MySQL 时出现中文乱码问题解决方案
  • 【物理教学】不准确温度计图像代码分享
  • 为什么越来越多的人选择开放式耳机?平价高品质蓝牙耳机推荐
  • Django form.save 方法的详细分析
  • 雅特力初步环境准备
  • AI编程工具合集
  • Apache的基本使用
  • CSS实用技巧干货
  • css选择器
  • Facebook AccountKit 接入的坑点
  • golang 发送GET和POST示例
  • JavaScript 基本功--面试宝典
  • JS数组方法汇总
  • MYSQL 的 IF 函数
  • MySQL主从复制读写分离及奇怪的问题
  • OpenStack安装流程(juno版)- 添加网络服务(neutron)- controller节点
  • SAP云平台运行环境Cloud Foundry和Neo的区别
  • VUE es6技巧写法(持续更新中~~~)
  • 聚簇索引和非聚簇索引
  • 前端面试总结(at, md)
  • 入门到放弃node系列之Hello Word篇
  • 入手阿里云新服务器的部署NODE
  • 我感觉这是史上最牛的防sql注入方法类
  • 小试R空间处理新库sf
  • 异常机制详解
  • 走向全栈之MongoDB的使用
  • MiKTeX could not find the script engine ‘perl.exe‘ which is required to execute ‘latexmk‘.
  • AI又要和人类“对打”,Deepmind宣布《星战Ⅱ》即将开始 ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • #pragma预处理命令
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (附源码)计算机毕业设计SSM智能化管理的仓库管理
  • (蓝桥杯每日一题)平方末尾及补充(常用的字符串函数功能)
  • (亲测成功)在centos7.5上安装kvm,通过VNC远程连接并创建多台ubuntu虚拟机(ubuntu server版本)...
  • (万字长文)Spring的核心知识尽揽其中
  • (详细文档!)javaswing图书管理系统+mysql数据库
  • (原)本想说脏话,奈何已放下
  • (转)创业家杂志:UCWEB天使第一步
  • (转)甲方乙方——赵民谈找工作
  • .NET 4.0网络开发入门之旅-- 我在“网” 中央(下)
  • .NET C# 使用 iText 生成PDF
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET I/O 学习笔记:对文件和目录进行解压缩操作
  • .net 打包工具_pyinstaller打包的exe太大?你需要站在巨人的肩膀上-VC++才是王道
  • .NET/C# 使用 #if 和 Conditional 特性来按条件编译代码的不同原理和适用场景
  • .NET8使用VS2022打包Docker镜像