当前位置:首页 > React

React如何监听数据

2026-02-12 01:50:52React

监听数据变化的方法

在React中,监听数据变化通常通过组件的状态(state)和属性(props)管理机制实现。React的核心思想是数据驱动视图,当数据发生变化时,组件会自动重新渲染。

使用useState和useEffect

useState用于定义组件内部状态,useEffect用于监听状态变化并执行副作用。当状态更新时,组件会重新渲染。

import React, { useState, useEffect } from 'react';

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

  useEffect(() => {
    console.log('Count changed:', count);
  }, [count]); // 仅在count变化时触发

  return (
    <button onClick={() => setCount(count + 1)}>
      Click me
    </button>
  );
}

使用useReducer

useReducer适用于复杂状态逻辑,可以集中管理状态变化并监听。

import React, { useReducer, useEffect } from 'react';

function reducer(state, action) {
  switch (action.type) {
    case 'increment':
      return { count: state.count + 1 };
    default:
      throw new Error();
  }
}

function ExampleComponent() {
  const [state, dispatch] = useReducer(reducer, { count: 0 });

  useEffect(() => {
    console.log('State changed:', state);
  }, [state]); // 监听整个state对象

  return (
    <button onClick={() => dispatch({ type: 'increment' })}>
      Click me
    </button>
  );
}

监听props变化

父组件传递的props变化时,子组件可以通过useEffect监听。

import React, { useEffect } from 'react';

function ChildComponent({ value }) {
  useEffect(() => {
    console.log('Props value changed:', value);
  }, [value]); // 监听props.value的变化

  return <div>{value}</div>;
}

使用Context API

通过useContext监听全局状态变化,适用于跨组件数据共享。

import React, { useContext, useEffect } from 'react';

const MyContext = React.createContext();

function ParentComponent() {
  const [value, setValue] = useState('default');

  return (
    <MyContext.Provider value={{ value, setValue }}>
      <ChildComponent />
    </MyContext.Provider>
  );
}

function ChildComponent() {
  const { value } = useContext(MyContext);

  useEffect(() => {
    console.log('Context value changed:', value);
  }, [value]); // 监听context中的value变化

  return <div>{value}</div>;
}

自定义Hook监听数据

封装自定义Hook实现复用逻辑,例如监听窗口大小变化。

React如何监听数据

import { useState, useEffect } from 'react';

function useWindowSize() {
  const [size, setSize] = useState({
    width: window.innerWidth,
    height: window.innerHeight,
  });

  useEffect(() => {
    const handleResize = () => {
      setSize({
        width: window.innerWidth,
        height: window.innerHeight,
      });
    };
    window.addEventListener('resize', handleResize);
    return () => window.removeEventListener('resize', handleResize);
  }, []); // 空依赖表示仅在挂载和卸载时执行

  return size;
}

注意事项

  • 避免在useEffect中直接修改依赖项,否则可能导致无限循环。
  • 对于对象或数组等引用类型,确保正确处理依赖关系,必要时使用深比较或useMemo优化。
  • 类组件中可以通过componentDidUpdate生命周期方法监听props或state变化。

标签: 数据React
分享给朋友:

相关文章

vue怎么实现数据检测

vue怎么实现数据检测

Vue 数据检测的实现方式 Vue 通过响应式系统实现数据检测,核心是利用 Object.defineProperty(Vue 2)或 Proxy(Vue 3)对数据进行劫持,结合发布-订阅模式实现依…

vue实现数据结构图

vue实现数据结构图

Vue 实现数据结构图的方法 使用第三方库 Vue 可以与多种图表库结合使用,例如 D3.js、ECharts 或 Vis.js。这些库提供了强大的图形渲染能力,适合展示复杂的数据结构图。 安装 E…

vue实现数据删除

vue实现数据删除

Vue 实现数据删除的方法 在 Vue 中删除数据通常涉及操作数组或对象,并结合响应式更新。以下是几种常见实现方式: 从数组中删除数据 使用 splice 方法删除数组中的指定项: methods…

vue怎么实现数据劫持

vue怎么实现数据劫持

Vue 数据劫持的实现原理 Vue 的数据劫持主要通过 Object.defineProperty 或 Proxy 实现,用于监听数据变化并触发视图更新。 使用 Object.definePrope…

vue如何实现数据响应

vue如何实现数据响应

Vue 数据响应的实现原理 Vue 的数据响应式系统基于 ES5 的 Object.defineProperty 或 ES6 的 Proxy 实现。核心是通过数据劫持结合发布-订阅模式,在数据变化时自…

vue实现点击切换数据

vue实现点击切换数据

Vue实现点击切换数据的方法 使用v-for和v-on指令 在Vue中可以通过v-for渲染列表数据,结合v-on:click或@click绑定点击事件实现切换。 <template&…