React useEffect Hooks 传递不同参数有哪些执行规则和返回方式
Effect Hook 可以让你在函数组件中执行副作用操作,同参这里提到副作用,数有式什么是执行副作用呢,就是规则除了状态相关的逻辑,比如网络请求,和返回方监听事件,同参查找 dom。数有式
可以这样说,执行在使用了useState或是规则useEffect这样的hooks之后,每次组件在render的和返回方时候都生成了一份本次render的state、function、同参effects,数有式这些与之前或是执行之后的render里面的内容都是没有关系的。而对于class component来说,规则state是和返回方一种引用的形式。这就造成了二者在一些表现上的不同。
只要是副效应,都可以使用useEffect()引入。免费信息发布网它的常见用途有下面几种。
获取数据(data fetching)事件监听或订阅(setting up a subscription)改变 DOM(changing the DOM)输出日志(logging)副效应是随着组件加载而发生的,那么组件卸载时,可能需要清理这些副效应。
useEffect()允许返回一个函数,在组件卸载时,执行该函数,清理副效应。如果不需要清理副效应,useEffect()就不用返回任何值。
使用useEffect()时,有一点需要注意。如果有多个副效应,应该调用多个useEffect(),而不应该合并写在一起。

一、参数规则
1.可选的
2.数组类型
3.值为state或者props
二、不同的参数和返回
1.不传参数默认的行为,会每次 render 后都执行,一般表单控制中使用。
类似于类组件中的componentDidMoount以及componentDidUpdate。
useEffect(() => {
console.log(useEffect with no dependency)
})2.空数组传入第二个参数,每次 render 后比较数组的值没变化,不会在执行。
类似于类组件中的源码下载 componentDidMount。
useEffect(() => {
console.log(useEffect with empty dependency)
}, [])3.有一个或者多个值得数组传入第二个参数,只有一个值,比较该值有变化就执行
传入第二个参数,有2个值的数组,会比较每一个值,有一个不相等就执行;
类似于类组件中的componentDidUpdate;
useEffect(() => {
console.log(useEffect widh specify dependency)
}, [state, props])
4.返回一个函数返回时传递一个函数进行卸载,在组件卸载时候调用;
类似于类组价中componentWillUnmout。
useEffect(() => {
console.log(useEffect widh specify callback);
return () => {
console.log(useEffect with specify callback);
}
})
如果你熟悉 React class 的生命周期函数,你可以把 useEffect Hook 看做componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。
class Example extends React.Component {
constructor(props) {
super(props);
this.state = {
count: 0
};
}
componentDidMount() {
document.title = `You clicked ${this.state.count} times`;
}
componentDidUpdate() {
document.title = `You clicked ${this.state.count} times`;
}
render() {
return (
You clicked {this.state.count} times
Click me
);
}
}使用 Hook 的示例import React, { useState, useEffect } from react;
function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
document.title = `You clicked ${count} times`;
});
return (
You clicked {count} times
Click me
);
}默认情况下,它在第一次渲染之后和每次更新之后都会执行。你可能会更容易接受 effect 发生在“渲染之后”这种概念,不用再去考虑“挂载”还是“更新”。React 保证了每次运行 effect 的同时,DOM 都已经更新完毕。
数据获取,设置订阅以及手动更改 React 组件中的 DOM 都属于副作用。有些副作用可能需要清除,所以需要返回一个函数,比如挂载时设置定时器,卸载时取消定时器。
class Example extends Component {
constructor (props) {
super(props);
this.state = {
count: 0
}
}
componentDidMount() {
this.id = setInterval(() => {
this.setState({count: this.state.count + 1})
}, 1000);
}
componentWillUnmount() {
clearInterval(this.id)
}
render() {
return
{this.state.count}
;}
}使用 Hook 的示例function Example() {
const [count, setCount] = useState(0);
useEffect(() => {
const id = setInterval(() => {
setCount(c => c + 1);
}, 1000);
return () => clearInterval(id);
}, []);
return
{count}
}香港云服务器相关文章
电脑剪映短剧教程(以电脑剪映为背景,教你制作出精彩的短剧作品)
摘要:视频剪辑已经成为现代人生活中常见的一项技能,通过剪辑,我们可以将生活中的精彩瞬间制作成精美的短剧。而电脑剪映作为一款功能强大且易于上手的剪辑软件,成为了许多人入门剪辑的首选。本文将...2025-11-05
windows 7进行视频截图时出现黑屏怎么办?解决视频截图时出现黑
Windows 7进行视频截图时出现黑屏的解决办法:1、一般有两个方法可以用来解决,一个方法是用两个不同的播放器,同时打开同一个文件,另一个方法是禁用DirectDraw。2、 默认情况下,Direc2025-11-05- Windows 7桌面鼠标右键过慢的解决方案 刚装了系统Windows 7旗舰版发现鼠标桌面右键弹出很慢,以前不是这样啊? 还有后台运行的小圆圈 试了很多方法 最后,发现解决方法: 开始 运行 输入以2025-11-05
- 有人问我,他电脑装的是英文版的Windows 7系统,但是他想跟他的朋友一起玩魔兽,发现玩不了了。打开魔兽打不开,下面有两种设置,按照自己喜欢的选一个吧!1、修改注册表让你的英文系统识别中文点击开始运2025-11-05
电脑游戏频繁掉线显示错误解决方案(掌握,轻松解决游戏掉线问题)
摘要:电脑游戏是许多人的休闲娱乐方式,然而,频繁掉线显示错误却常常成为玩家们的困扰。游戏掉线不仅影响游戏体验,还可能导致游戏数据丢失等问题。本文将向大家介绍一些解决游戏频繁掉线的有效方法...2025-11-05
如今Winows7系统已经成为时下最流行的系统,其市场份额已经快要接近经典达十年之后的Windows XP系统,不过在使用Windows 7系统的时候不少朋友也会遇到诸多的不习惯,比如QQ界面假如靠边2025-11-05

最新评论