当前位置:首页 > React

react 实现 watch

2026-01-26 14:13:58React

在 React 中实现类似 Vue 的 watch 功能,可以通过以下几种方式监听状态变化并执行副作用:

使用 useEffect 钩子

useEffect 是 React 提供的标准方式,用于监听依赖项的变化并执行副作用。

react 实现 watch

import { useState, useEffect } from 'react';

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

  useEffect(() => {
    console.log('count changed:', count);
    // 可以在这里执行副作用逻辑
  }, [count]); // 依赖数组,仅当 count 变化时触发

  return (
    <button onClick={() => setCount(count + 1)}>
      Increment: {count}
    </button>
  );
}

自定义 useWatch Hook

封装一个自定义 Hook 来模拟 Vue 的 watch 行为,提供更灵活的监听逻辑。

react 实现 watch

import { useEffect, useRef } from 'react';

function useWatch(value, callback, options = { immediate: false }) {
  const isFirstRun = useRef(true);

  useEffect(() => {
    if (isFirstRun.current && !options.immediate) {
      isFirstRun.current = false;
      return;
    }
    callback(value);
  }, [value]);
}

// 使用示例
function Demo() {
  const [data, setData] = useState(null);

  useWatch(data, (newValue) => {
    console.log('data changed:', newValue);
  }, { immediate: true });

  return <button onClick={() => setData(Date.now())}>Update Data</button>;
}

使用第三方库

一些库(如 ahooks)提供了现成的 useWatch 或类似功能:

import { useWatch } from 'ahooks';

function Component() {
  const [state, setState] = useState({});

  useWatch(state, (prev, next) => {
    console.log('prev:', prev, 'next:', next);
  });

  return <button onClick={() => setState({ ...state, time: Date.now() })}>Update</button>;
}

对比依赖数组的旧值

useEffect 中通过引用对比或深比较实现类似 watch 的旧值访问:

useEffect(() => {
  const subscription = someObservable.subscribe();
  return () => subscription.unsubscribe(); // 清理函数
}, [someObservable]);

注意事项

  • 对于对象或数组等引用类型,需注意浅比较问题,可能需要配合 useMemo 或深比较工具。
  • 频繁触发的监听可能导致性能问题,可使用防抖(debounce)或节流(throttle)优化。
  • Class 组件中可通过 componentDidUpdate 实现类似功能。

标签: reactwatch
分享给朋友:

相关文章

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 运行以下命令查看项目中安装的 React 当前版本: npm list react 或 yarn list react 修改…

react如何销毁

react如何销毁

React 组件销毁的机制 在 React 中,组件的销毁通常由 React 的生命周期管理。当组件从 DOM 中移除时,React 会自动触发销毁相关的生命周期方法。以下是关键点: 组件的销毁通常…

react如何浮动

react如何浮动

使用 CSS 实现浮动 在 React 中实现浮动效果可以通过 CSS 的 float 属性完成。在组件的样式文件或内联样式中直接设置 float: left 或 float: right。…

如何安装react

如何安装react

安装React的方法 方法一:使用Create React App(官方推荐) Create React App是官方提供的脚手架工具,适合快速搭建React项目。确保已安装Node.js(建议版本≥…

react如何循环

react如何循环

循环渲染列表 在React中循环渲染列表通常使用map方法,这是最常用的方式。通过map可以将数组中的每个元素转换为React元素并渲染到页面上。 const items = ['Apple', '…

react如何启动

react如何启动

启动 React 项目的步骤 确保已安装 Node.js React 需要 Node.js 环境运行,建议安装最新稳定版(LTS)。可通过以下命令检查是否已安装: node -v npm -v…