当前位置:首页 > 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中监听这个记忆值。

react怎么实现watch

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可以返回一个清理函数,用于在组件卸载或依赖项变化时执行清理操作。

react怎么实现watch

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。

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 是一个用于构建用户界面的 JavaScript 库。学习 React 的第一步是掌握其核心概念,包括组件、状态(State)、属性(Props)和生命周期方法…

vue实现watch

vue实现watch

在 Vue 中实现 watch 的方法 Vue 的 watch 用于监听数据变化并执行相应的回调函数。以下是几种常见的实现方式: 基本用法 通过选项式 API 的 watch 属性监听数据变化:…

react如何开发组件

react如何开发组件

React 组件开发基础 React 组件分为函数组件和类组件两种形式。函数组件是现代 React 开发的主流方式,结合 Hooks 可以实现完整功能。 函数组件示例: function Gr…

如何优化react

如何优化react

优化 React 性能的方法 使用 React.memo 或 PureComponent 对于函数组件,使用 React.memo 进行记忆化,避免不必要的重新渲染。类组件可以使用 PureCompo…

react如何更新

react如何更新

更新 React 版本的方法 检查当前 React 版本 运行以下命令查看项目中安装的 React 版本: npm list react 更新 React 及相关依赖 通过 npm 或 yarn…

react如何查

react如何查

React 查询方法 React 提供了多种查询 DOM 元素的方式,以下是几种常见的方法: 使用 ref 通过 useRef 钩子可以获取 DOM 节点的引用,适用于直接操作 DOM 的场景。…