web前端全系列 教程
1839个小节阅读:2243.3k
目录
鸿蒙应用开发
C语言快速入门
JAVA全系列 教程
面向对象的程序设计语言
Python全系列 教程
Python3.x版本,未来主流的版本
人工智能 教程
顺势而为,AI创新未来
大厂算法 教程
算法,程序员自我提升必经之路
C++ 教程
一门通用计算机编程语言
微服务 教程
目前业界流行的框架组合
web前端全系列 教程
通向WEB技术世界的钥匙
大数据全系列 教程
站在云端操控万千数据
AIGC全能工具班
A A
White Night
每个 effect 都可以返回一个清除函数。它们都属于 effect 的一部分,我们期望这个清除函数在组件被卸载的时候被调用。
xxxxxxxxxx
import React, { Component } from 'react'
const MyAPI = {
count:0,
subScribe(cb){
this.intervalID = setInterval(() =>{
this.count += 1
cb(this.count)
},1000)
},
unSubScribe(){
clearInterval(this.intervalID)
this.reset()
},
reset(){
this.count = 0
}
}
export default class ChildComponent extends Component {
componentDidMount(){
MyAPI.subScribe((currentCount) =>{
console.log(currentCount)
})
}
componentWillUnmount() {
console.log("组件卸载了")
MyAPI.unSubScribe()
}
render() {
return (
<div>
<h3>Effect 清除</h3>
</div>
)
}
}
xxxxxxxxxx
import React,{ useEffect } from 'react'
const MyAPI = {
count: 0,
subScribe(cb) {
this.intervalID = setInterval(() => {
this.count += 1
cb(this.count)
}, 1000)
},
unSubScribe() {
clearInterval(this.intervalID)
this.reset()
},
reset() {
this.count = 0
}
}
export default function Demo() {
useEffect(() =>{
MyAPI.subScribe((count) =>{
console.log(count)
})
return () =>{
MyAPI.unSubScribe()
}
})
return (
<div>
<h3>Effect 清除</h3>
</div>
)
}
提示:
你可以把
useEffect
Hook 看做componentDidMount
,componentDidUpdate
,componentWillUnmount
三个函数的组合。