您现在的位置是:首页 > Javascript
当前栏目
这一次,彻底搞懂useEffect
2023-02-26 10:18:59 时间
什么是useEffect?
让函数型组件拥有处理副作用的能力,类似生命周期函数。
1. useEffect执行时机
可以把useEffect看做componentDidMount,componentDidUpdate,componentWillUnmount这三个函数的组合。
- 当做componentDidMount和componentDidUpdate的时候
function App() { const [count,setCount] = useState(0); // 组件挂载完成之后 或 组件数据更新完成之后 执行 useEffect(() => { console.log('组件挂载完成之后 或 组件数据更新完成之后 执行'); }) return ( <div> {count} <button onClick={() => setCount(count + 1)}>+1</button> </div> ) }
- 仅当做comonentDidMount的时候
useEffect(() => { console.log('仅当做componentDidMount'); },[])
- 当做componentWillunmount的时候(注意:这里不是仅当做componentWillunmount)
useEffect(() => () => { console.log('当做componentWillUnmount'); })
2. useEffect的使用方法示例
- 为window对象添加滚动事件。(挂载完成后绑定事件,卸载组件后解除绑定)
function App() { function onScroll() { console.log('监听到页面发生滚动了'); } useEffect(() => { window.addEventListener('scroll',onScroll); return () => { // 卸载组件时解除对事件的绑定 window.removeEventListener('scroll',onScroll); } }) return ( <div> App </div> ) }
- 设置定时器让count数值每隔一秒增加1。
function App() { const [count,setCount] = useState(0); useEffect(() => { const timeId = setInterval(() => { setCount(count => count + 1); },1000) return () => { clearInterval(timeId); } },[]) return ( <div> <h1>当前求和为:{count}</h1> </div> ) }
3. useEffect解决的问题
- 将一组相干的业务逻辑归置到了同一个副作用函数中.
- 简化重复代码,使组件内部代码更加清晰.
4:useEffect的第二个参数
- 只有指定数据发生变化的时候才触发effect
useEffect(() => { document.title = count; }, [count])
5:useEffect结合异步函数
在useEffect中直接使用async和await是会报错的,推荐使用立即执行函数来包裹异步函数。
function getData() { return new Promise(resolve => { resolve({msg: 'Hello'}) }) } function App() { useEffect(() => { (async function () { const result = await getData(); console.log(result); })() },[]) return ( <div> App </div> ) }
参考文献
- 官方文档
你还在原价购买阿里云、腾讯云、华为云、天翼云产品?那就亏大啦!现在申请成为四大品牌云厂商VIP用户,可以3折优惠价购买云服务器等云产品,并且可享四大云服务商产品终身VIP优惠价,还等什么?赶紧点击下面对应链接免费申请VIP客户吧:
相关文章
- 前端必会react面试题合集2
- 前端react面试题(必备)2
- 如何两天时间上线一款AI应用?
- C语言内联函数,提升C技巧必备
- 腾讯前端一面常考vue面试题汇总2
- 面试官:熔断和降级有什么区别?
- 面试必问:@Autowired 和 @Resource 有什么区别?
- 分享12款我常用的开源免费软件
- 腾讯前端vue面试题合集2
- 您需要关注 API 性能监控的五个原因
- 零信任安全建设的新陷阱:投入过度
- 面试官:如何排查死锁?
- 为遗留 Node.js 后端编写自动化测试
- 图形编辑器:适配高分辨率屏幕
- 面试官:JVM 如何确定死亡对象?
- B站容器云平台VPA技术实践
- 滴滴前端一面常考手写面试题合集2
- 滴滴前端一面经典手写面试题
- 前端工程化实战-开发企业级CLI
- Pandas可以直接读取网页html(表格)、json、csv等格式