欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > 能源 > React 中 useEffect 语法详解

React 中 useEffect 语法详解

2025/6/28 8:04:29 来源:https://blog.csdn.net/weixin_40629244/article/details/140967695  浏览:    关键词:React 中 useEffect 语法详解

1. 基本语法

useEffect(effectFn, deps)

effectFn:回调函数

deps:函数的依赖

2. 能力描述

useEffect Hook 相当于 componentDidMount,componentDidUpdate 和 componentWillUnmount 这三个函数的组合。

可以模拟渲染后、更新后、销毁三个动作。

3. 案例演示

3.1. 修改标题

import { useEffect } from "react"function App() {// 页面加载完成后,修改标题useEffect(()=>{document.title="React后台管理系统"})return (<div><p>欢迎学习React后台课程</p></div>)
}
export default App

3.2. 修改状态值

import { useEffect,useState } from "react"function App() {const [count,setCount] = useState(0)// 页面加载完成后,修改状态值useEffect(()=>{setCount(count+1);},[])// 一定要有依赖,否则发生死循环return (<div><p>Count:{count}</p></div>)
}export default App

3.3. 根据依赖修改状态值

import { useEffect,useState } from "react"function App() {const [count,setCount]= useState(0);const [total,setTotal] = useState(0);// 页面加载完成后,根据依赖修改状态值useEffect(()=>{setTotal(count * 5)},[count])return (<div><p>Count:{count}Total:{total}</p></div>)
}export default App

3.4. 销毁定时器

import { useEffect,useState } from "react"function App() {const [count,setCount] = useState(0)// 页面关闭后,消毁定时器useEffect(()=>{const timer = setInterval(()=>{setCount(count=>count+1);},1000)return ()=>{clearInterval(timer);}},[])return (<div><p>Count:{count}</p></div>)
}export default App

3.5. 自定义Hook

import { useWindowSize } from './useWindowSize.tsx'
function App() {const [size] = useWindowSize()return (<div><p>window width : {size.width}window height : {size.height}</p></div>)
}
export default App

上面代码中引入的组件如下:

import { useEffect,useState } from "react"export function useWindowSize(){const [size,setSize]=useState({width:document.documentElement.clientWidth,height:document.documentElement.clientHeight})const handleResize=()=>{setSize({width:document.documentElement.clientWidth,height:document.documentElement.clientHeight})}useEffect(()=>{window.addEventListener('resize',handleResize)return()=>{window.removeEventListener("resize",handleResize)}},[])return [size]
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词