React Hooks —— Effect Hooks

什么是Hooks

Hooks从语法上来说是一些函数。这些函数可以用于在函数组件中引入状态管理和生命周期方法。

React Hooks的优点

  1. 简洁
    从语法上来说,写的代码少了
  2. 上手非常简单
    • 基于函数式编程理念,只需要掌握一些JavaScript基础知识
    • 与生命周期相关的知识不用学,react Hooks使用全新的理念来管理组件的运作过程
    • 与HOC相关的知识不用学,React Hooks能够完美解决HOC想要解决的问题,并且更可靠
    • Mobx取代了Redux做状态管理
  3. 代码复用性更好
  4. 与Typescript结合更简单

React Hooks的缺点

  1. 状态不同步
    在异步操作的函数中访问的状态还是原来的状态的值
  2. useEffect依赖问题
    当useEffect依赖的数据变多后会导致频繁触发

React Hooks的注意事项

  1. 命名规范
    自定义Hooks的命名一律使用use作为前缀,形如:useXXX
  2. 仅在最外层调用React Hooks
  3. 仅从react函数中调用react Hooks
    在自定义Hooks或者组件中调用Hooks

useEffect:

useEffect能够监听变化,并执行回调函数。

useEffect(effect,[deps]):

  • effect:effect参数是一个回调函数,当deps中的依赖发生变化effect被触发

  • deps:deps参数是一个数组,数组中的元素是需要监测的状态。

useEffect监测指定的状态,当状态更新时调用回调函数。如果不传第二个参数则监听所有状态。如果传递一个[]表示不监听任何状态,只在初始化时执行一次。

jsx 复制代码
import {useEffect}from 'react'
useEffect(()=>{},[]);

如果回调函数返回一个函数,这个函数相当于生命周期的componentWillUnmount。

jsx 复制代码
import {useEffect} from 'react';
useEffect(()=>{
	return ()=>{
		// 组件卸载时触发
	}
},[]);

useLayoutEffect

useLayoutEffect与useEffect很相似也接收一个回调函数和一个数组,当数组中的依赖发生变化后触发回调函数。不过他们存在以下不同:

  • useEffect是异步执行的,而useLayoutEffect是同步执行的
  • useEffect的执行时机是浏览器完成渲染后,而useLayoutEffect的执行时机是浏览器将内容渲染到界面之前

当useEffect中的操作需要处理DOM,并且处理DOM的过程中会改变页面的样式时就需要使用useLayoutEffect。

jsx 复制代码
import {useLayoutEffect}from 'react'

function App(){
useLayoutEffect(()=>{
},[]);
	return <></>
}
相关推荐
Theodore_1022几秒前
ES6(8) Fetch API 详解
开发语言·前端·javascript·ecmascript·es6
月明长歌9 分钟前
Vue + Axios + Mock.js 全链路实操:从封装到数据模拟的深度解析
前端·javascript·vue.js·elementui·es6
CodeCraft Studio19 分钟前
Excel处理控件Spire.XLS系列教程:C# 合并、或取消合并 Excel 单元格
前端·c#·excel
头顶秃成一缕光30 分钟前
若依——基于AI+若依框架的实战项目(实战篇(下))
java·前端·vue.js·elementui·aigc
冴羽yayujs33 分钟前
SvelteKit 最新中文文档教程(17)—— 仅服务端模块和快照
前端·javascript·vue.js·前端框架·react
木木黄木木1 小时前
HTML5图片裁剪工具实现详解
前端·html·html5
念九_ysl1 小时前
基数排序算法解析与TypeScript实现
前端·算法·typescript·排序算法
海石1 小时前
vue2升级vue3踩坑——【依赖注入】可能成功了,但【依赖注入】成功了不太可能
前端·vue.js·响应式设计
uhakadotcom1 小时前
Vite 与传统 Bundler(如 Webpack)在 Node.js 应用的性能对比
前端·javascript·面试
uhakadotcom1 小时前
Socket.IO 简明教程:实时通信的基础知识
前端·javascript·面试