钩子useEffect

在 React Native(简称 RN)中,useEffect 是一个 React 的 Hook,用于在函数组件中处理副作用(side effects),比如:
• 发起网络请求
• 订阅或解绑事件
• 更新 DOM(React Native 中是原生视图)
• 设置定时器等
📌 基本语法:

import React, { useEffect } from 'react';

useEffect(() => {
  // 副作用逻辑

  return () => {
    // 可选的清理逻辑(组件卸载或依赖更新时调用)
  };
}, [依赖项数组]);

✅ 示例 1:组件加载时执行一次

useEffect(() => {
  console.log('组件挂载完成');

  return () => {
    console.log('组件卸载');
  };
}, []); // 空数组 => 只在挂载和卸载时触发

✅ 示例 2:监听某个变量的变化

const [count, setCount] = useState(0);

useEffect(() => {
  console.log(`count 变化为:${count}`);
}, [count]); // count 变化时触发

✅ 示例 3:处理计时器 + 清理

useEffect(() => {
  const timer = setInterval(() => {
    console.log('每秒执行一次');
  }, 1000);

  return () => {
    clearInterval(timer); // 组件卸载时清除定时器
  };
}, []);

⚠️ 注意事项
• 不要把 useEffect 放在条件语句里,必须在组件的顶层调用。
• 如果依赖项写错(比如遗漏某个 state/prop),可能导致副作用逻辑执行时机异常。
• 清理函数(return () => {...})对于取消监听、清除定时器等是非常重要的。

问:

他是不是生命周期的体现?

答:

是的,useEffect 可以看作是 函数组件中“生命周期”的体现,相当于在类组件中常见的生命周期方法的集合体。
✅ 类组件 vs 函数组件生命周期对照:

✅ 类组件 vs 函数组件生命周期对照:

老版本

class MyComponent extends React.Component {
  componentDidMount() {
    console.log('挂载完成');
  }

  componentDidUpdate(prevProps) {
    if (this.props.count !== prevProps.count) {
      console.log('count 更新了');
    }
  }

  componentWillUnmount() {
    console.log('组件卸载');
  }

  render() {
    return <Text>Hello</Text>;
  }
}

等价于 🟰🟰🟰🟰🟰

新版本

import React, { useEffect } from 'react';

function MyComponent({ count }) {
  // 相当于 componentDidMount
  useEffect(() => {
    console.log('挂载完成');

    return () => {
      console.log('组件卸载'); // 相当于 componentWillUnmount
    };
  }, []);

  // 相当于 componentDidUpdate(count)
  useEffect(() => {
    console.log('count 更新了');
  }, [count]);

  return <Text>Hello</Text>;
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容