useEffect

useEffect(setup, dependencies?)

参数

  • setup:一个函数,可选择性return一个 cleanup 函数。在每次dependencies对比结果为false,React 将首先使用旧值运行 cleanup 函数(如果你提供了该函数),然后使用新值运行 setup 函数。在组件从 DOM 中移除后,React 将最后一次运行 cleanup 函数。
  • 可选dependencies:是一个数组[dep1, dep2, dep3],React 将使用 Object.is 来比较每个依赖项和它先前的值。需要注意的是dependencies的长度和顺序不能改变。

用法

请求数据
import { useState, useEffect } from 'react';
import { fetchBio } from './api.js';

export default function Page() {
  const [person, setPerson] = useState('Alice');
  const [bio, setBio] = useState(null);

  useEffect(() => {
    let ignore = false;
    setBio(null);
    fetchBio(person).then(result => {
      if (!ignore) {
        setBio(result);
      }
    });
    return () => {
      ignore = true;
    };
  }, [person]);
  
  // ...
获取DOM
const domRef = useRef(null);

useEffect(() => {
	// 在组件挂载后,myRef.current 将会是对应的 DOM 元素
	console.log(domRef.current);
}, []);

return (
	<div ref={domRef}/>
);

注意事项

  • useEffect 只在客户端上运行,在服务端渲染中不会运行。
  • useEffect 是一个 Hook,因此只能在 组件的顶层 或自己的 Hook 中调用它,而不能在循环或者条件内部调用。如果需要,抽离出一个新组件并将 state 移入其中。

React Hooks 模拟生命周期

componentDidMount:组件挂载后(插入 DOM 树中)立即调用
useEffect(() => {
	// 这里写 componentDidMount 中的逻辑
}, []);
componentWillUnmount:组件卸载及销毁之前调用
useEffect(() => {
	return () => {
		// 这里写 componentWillUnmount 中的逻辑
	};
}, []); 

推荐使用:useUnmount

componentDidUpdate:在组建更新后会被立即调用。
	const [prevProps, setPrevProps] = useState(props);
	useEffect(() => {
    	// 例如根据前后props的差异进行相应处理
		if (prevProps.someValue !== props.someValue) {
			// 执行相应操作
		}
    // 更新prevProps为当前props,供下次渲染使用
	setPrevProps(props);
  }, [props]);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值