当前位置:首页 > React

react怎么实现watch

2026-01-26 17:46:15React

监听状态变化

在React中,可以通过useEffect钩子来监听状态的变化,类似于Vue中的watch功能。useEffect会在依赖项发生变化时执行回调函数。

import { useState, useEffect } from 'react';

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

  useEffect(() => {
    console.log('count changed:', count);
  }, [count]);

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

监听多个状态

如果需要监听多个状态变量,可以将它们都添加到useEffect的依赖数组中。当其中任何一个状态发生变化时,回调函数都会执行。

const [name, setName] = useState('');
const [age, setAge] = useState(0);

useEffect(() => {
  console.log('name or age changed:', name, age);
}, [name, age]);

监听对象属性

如果需要监听对象的某个属性变化,可以使用useMemo来记忆该属性,然后在useEffect中监听这个记忆值。

const [user, setUser] = useState({ name: '', age: 0 });

const userName = useMemo(() => user.name, [user]);

useEffect(() => {
  console.log('user name changed:', userName);
}, [userName]);

监听初次渲染

如果只想在组件初次渲染时执行某些逻辑,可以传递一个空数组作为useEffect的依赖项。

useEffect(() => {
  console.log('Component mounted');
}, []);

清理副作用

useEffect可以返回一个清理函数,用于在组件卸载或依赖项变化时执行清理操作。

useEffect(() => {
  const timer = setInterval(() => {
    console.log('Timer tick');
  }, 1000);

  return () => {
    clearInterval(timer);
  };
}, []);

自定义Hook封装

可以将监听逻辑封装成自定义Hook,方便复用。

function useWatch(value, callback) {
  useEffect(() => {
    callback(value);
  }, [value]);
}

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

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

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

性能优化

对于复杂的监听逻辑,可以使用useMemouseCallback来优化性能,避免不必要的计算和渲染。

const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]);

const memoizedCallback = useCallback(() => {
  doSomething(a, b);
}, [a, b]);

第三方库

如果需要更强大的监听功能,可以考虑使用第三方库如react-use中的usePrevioususeObservable等Hook。

react怎么实现watch

import { usePrevious } from 'react-use';

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

  useEffect(() => {
    if (prevCount !== count) {
      console.log('count changed from', prevCount, 'to', count);
    }
  }, [count, prevCount]);
}

标签: reactwatch
分享给朋友:

相关文章

react如何鉴定

react如何鉴定

React 鉴权方法 基于路由的鉴权 在 React 中,可以通过封装路由组件实现鉴权。使用 react-router-dom 检查用户是否登录,未登录则跳转至登录页。 import { Rou…

vue watch实现

vue watch实现

在 Vue 中实现 watch 监听数据变化 Vue 的 watch 选项用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基础用法 export default { data(…

react如何收录

react如何收录

React 收录方法 React 的收录主要涉及搜索引擎优化(SEO)和预渲染技术。由于 React 是单页应用(SPA),默认情况下内容由 JavaScript 动态生成,可能导致搜索引擎爬虫难以收…

react如何动画

react如何动画

React 动画实现方法 React 中实现动画可以通过多种方式,包括原生 CSS、第三方库或 React 内置的动画解决方案。以下是几种常见方法: 使用 CSS 动画和过渡 通过 CSS 的 tr…

react项目如何

react项目如何

创建React项目 使用create-react-app工具快速初始化项目。确保已安装Node.js(建议版本≥12.0.0),运行以下命令生成新项目: npx create-react-app m…

react如何debugger

react如何debugger

调试 React 应用的方法 使用浏览器开发者工具进行调试 React 开发者工具(React DevTools)是调试 React 应用的必备工具。安装 Chrome 或 Firefox 扩展后,可…