当前位置:首页 > React

react 实现 watch

2026-01-26 14:13:58React

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

使用 useEffect 钩子

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

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 行为,提供更灵活的监听逻辑。

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 实现类似功能。

react 实现 watch

标签: reactwatch
分享给朋友:

相关文章

react 如何引入jquery

react 如何引入jquery

安装 jQuery 库 在 React 项目中引入 jQuery 的第一步是安装 jQuery。可以通过 npm 或 yarn 安装: npm install jquery # 或 yarn…

如何降低react版本

如何降低react版本

降低 React 项目版本的步骤 检查当前 React 版本 在项目根目录的 package.json 文件中查看 dependencies 或 devDependencies 下的 react 和…

react如何更新

react如何更新

更新 React 项目的方法 检查当前 React 版本 在项目根目录的 package.json 文件中查看 react 和 react-dom 的版本号。也可以通过命令行运行以下命令查看: np…

react实现vue

react实现vue

React 实现 Vue 功能 React 和 Vue 是两种不同的前端框架,但可以通过一些方法在 React 中实现 Vue 的特性。以下是几种常见 Vue 功能在 React 中的实现方式:…

如何评价react native

如何评价react native

React Native 的优势 跨平台开发效率高:基于 JavaScript 和 React 语法,可同时开发 iOS 和 Android 应用,减少重复代码量。性能接近原生:通过原生组件渲染,性能…

如何生成react代码

如何生成react代码

使用 Create React App 生成项目 安装 Node.js 后,通过命令行工具运行以下命令创建新项目: npx create-react-app my-app cd my-app np…