useEffect中return函数的作用和执行时机解读
作者:淘淘是只狗
这篇文章主要介绍了useEffect中return函数的作用和执行时机,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
useEffect中return函数作用和执行时机
官网的代码
import React, { useState, useEffect } from 'react';
function FriendStatus(props) {
const [isOnline, setIsOnline] = useState(null);
useEffect(() => {
function handleStatusChange(status) {
setIsOnline(status.isOnline);
}
ChatAPI.subscribeToFriendStatus(props.friend.id, handleStatusChange);
// Specify how to clean up after this effect:
return function cleanup() {
ChatAPI.unsubscribeFromFriendStatus(props.friend.id, handleStatusChange);
};
});
if (isOnline === null) {
return 'Loading...';
}
return isOnline ? 'Online' : 'Offline';
}
这是effect可选的清除机制
每个 effect 都可以返回一个清除函数。

React会在组件卸载的时候执行清除操作
effect 在每次渲染的时候都会执行。
React 会在执行当前 effect 之前对上一个 effect 进行清除。
import { useEffect, useState } from 'react';
const Example = () => {
const [count, setCount] = useState(0);
useEffect(() => {
console.log("哈哈哈,useEffect 又执行了");
return () => {
console.log("看到我就知道执行了清除机制(~ ̄▽ ̄)~");
};
}, [count]);
return (
<div>
<p>那啥,你点了我 {count} 次 ⏲️⏲️⏲️⏲️</p>
{console.log("这是 dom 节点渲染了,小样╭(╯^╰)╮")}
<button
onClick={() => {
setCount(count + 1);
}}
>
你觉得你点击我之后会发生什么⛏️⛏️⛏️
</button>
</div>
);
};
function App() {
return (
<div className="App">
<Example />
</div>
);
}
export default App;
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
