当前位置:首页 > 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中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…

react如何检测

react如何检测

检测 React 应用的方法 使用 PropTypes 进行类型检查 PropTypes 是 React 内置的类型检查工具,用于验证组件的 props 是否符合预期。在开发环境中,PropTypes…

如何调试react

如何调试react

调试 React 应用的方法 使用 React Developer Tools 安装浏览器扩展(Chrome/Firefox),通过组件树查看组件状态、props 和 hooks。支持实时编辑 pro…

react如何代码优化

react如何代码优化

减少不必要的重新渲染 使用 React.memo 包装函数组件以避免在 props 未变化时重新渲染。对于类组件,可以通过 shouldComponentUpdate 或继承 PureComponen…

react如何实现混入

react如何实现混入

在React中实现混入(Mixin)功能可以通过以下几种方式实现,React官方已不推荐使用传统的React.createClass混入方式,但可通过高阶组件或自定义Hook替代。 高阶组件(HOC…

react run如何搭配

react run如何搭配

运行 React 项目的常见方法 使用 create-react-app 脚手架 通过官方脚手架工具快速初始化项目并运行开发服务器: npx create-react-app my-app cd…