当前位置:首页 > 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 如何引入css

react 如何引入css

在 React 中引入 CSS 的方法 React 提供了多种引入 CSS 的方式,可以根据项目需求选择合适的方法。以下是常见的几种方式: 内联样式 内联样式直接在组件中通过 style 属性定义…

如何生成react代码

如何生成react代码

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

react 如何引入jquery

react 如何引入jquery

引入 jQuery 到 React 项目 在 React 项目中引入 jQuery 可以通过多种方式实现,但需要注意 React 和 jQuery 操作 DOM 的方式可能冲突,因此建议仅在必要时使用…

vue watch实现

vue watch实现

使用 watch 监听数据变化 在 Vue 中,watch 用于监听数据的变化并执行相应的回调函数。通过 watch 可以监听响应式数据的变化,包括 data、computed 或 props 中的数…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

如何react页面

如何react页面

创建 React 页面 使用 create-react-app 快速初始化项目: npx create-react-app my-app cd my-app npm start 基础页面结构 在…