📅  最后修改于: 2023-12-03 15:36:58.237000             🧑  作者: Mango
副作用指当一个函数执行时,它对程序状态之外的环境造成的影响,这些状态包括全局变量、文件系统、网络请求等。在函数式编程中,尽量避免副作用可以使代码更加健壮和可维护。
但在实际开发中,副作用是必要的。常见的副作用包括获取数据、更新DOM、发送网络请求等。
React提供了一个称为useEffect
的Hook来处理副作用。useEffect
可以接受两个参数:第一个参数是执行副作用的函数,第二个参数是一个数组,用于指定依赖项。
useEffect(() => {
// 副作用代码
}, [依赖项])
当[依赖项]
的值发生变化时,useEffect
会重新执行。
如果useEffect
的第二个参数为空数组,表示不依赖任何值,那么副作用只会在组件挂载时执行一次,类似于类组件中的componentDidMount
。
useEffect(() => {
console.log('组件挂载了!')
}, [])
如果省略第二个参数,副作用会在每次组件更新时都执行一次,类似于类组件中的componentDidUpdate
。
useEffect(() => {
console.log('组件更新了!')
})
当组件被销毁时,useEffect
会执行一个清除函数,用来清理副作用。
useEffect(() => {
const timer = setInterval(() => {
console.log('定时器执行了!')
}, 1000)
return () => {
clearInterval(timer)
console.log('定时器被清除了!')
}
}, [])
useEffect
可以返回一个函数,用来清除副作用。当组件被销毁时,这个清除函数会被自动执行,以清理所有的副作用。
useEffect(() => {
const timer = setInterval(() => {
console.log('定时器执行了!')
}, 1000)
return () => {
clearInterval(timer)
console.log('定时器被清除了!')
}
}, [])
副作用是程序状态之外的影响,如文件系统、网络请求等。React提供了useEffect
来处理副作用,它可以接受副作用函数和依赖项数组作为参数,并且可以返回一个清除函数。在使用useEffect
时,需要注意副作用的触发时机以及清除函数的实现。