React如何实现Vue的watch监听属性

 更新时间:2023年06月02日 11:20:35   作者:一只小可乐吖  
在 Vue 中可以简单地使用 watch 来监听数据的变化,还能获取到改变前的旧值,而在 React 中是没有 watch 的,今天通过本文给大家讲解React实现Vue的watch监听属性的方法,需要的朋友可以参考下

在 Vue 中可以简单地使用 watch 来监听数据的变化,还能获取到改变前的旧值,而在 React 中是没有 watch 的。

React中比较复杂,但是我们如果想在 React 中实现一个类似 Vue 的watch 监听属性,也不是没有办法。

在React类组件中实现watch监听属性

我们可以使用 componentDidUpdate 函数来监听组件属性的变化,来模拟于 Vue 中的watch。

例如,我们有一个组件 MyComponent,其中有一个属性 name:

class MyComponent extends React.Component {
  state = {
    name: 'John'
  }
  componentDidUpdate(prevProps, prevState) {
    if (prevState.name !== this.state.name) {
      console.log('Name changed to:', this.state.name)
    }
  }
  render() {
    return (
      <div>
        My name is {this.state.name}
      </div>
    )
  }
}

在 componentDidUpdate 函数中,我们可以比较当前状态和之前的状态,当 name 属性发生变化时,就可以执行某些操作,例如打印日志。

需要注意的是,在 componentDidUpdate 函数中,我们还需要比较 prevprops 和 this.props ,以确保只有 name 属性发生变化时才会执行我们的操作:

componentDidUpdate(prevProps, prevState) {
    if (prevProps.name !== this.props.name || prevState.name !== this.state.name) {
      console.log('Name changed to:', this.state.name)
    }
}

这样我们就可以在 React 类组件中实现类似于 Vue 中 watch 的功能,监听组件属性的变化并执行相应的操作。

在React函数组件中实现watch监听属性

在 React 中默认函数组件不能使用生命周期。需要配合 React16.8新增的 Hook -- useEffect 才能实现。使用 React 实现类似 Vue 中的 watch 监听属性可以通过使用 useEffect hook来完成。

1、引入useEffect hook:

import { useEffect } from 'react';

2、在组件中定义要监听的属性:

const [data, setData] = useState({ name: 'John', age: 25 });
const [name, setName] = useState('');
// 监听data对象的name属性的变化
useEffect(() => {
   console.log(`name: ${data.name}`);
}, [data.name]);

3、监听属性的变化:

// 修改data对象的name属性的值
setData({...data, name: 'Lucy'}); 

当data对象的name属性发生改变时,useEffect 会触发执行其回调函数,并打印出新的值。

需要注意的是,由于React 中所有组件状态都是不可变的,所以我们在修改要监听的属性时需要使用深拷贝,确保不会影响到原始的值。

到此这篇关于React实现Vue的watch监听属性的文章就介绍到这了,更多相关Reactwatch监听属性内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 详解React中合并单元格的正确写法

    详解React中合并单元格的正确写法

    用表格进行页面布局,页面布局在各种浏览器的的兼容性, 本文主要介绍了详解React中合并单元格的正确写法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2019-01-01
  • React中的权限组件设计问题小结

    React中的权限组件设计问题小结

    这篇文章主要介绍了React中的权限组件设计,整个过程也是遇到了很多问题,本文主要来做一下此次改造工作的总结,对React权限组件相关知识感兴趣的朋友一起看看吧
    2022-07-07
  • react16中的hooks的底层实现原理

    react16中的hooks的底层实现原理

    本文主要介绍了react16中的hooks的底层实现原理,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2025-09-09
  • React Native 集成jpush-react-native的示例代码

    React Native 集成jpush-react-native的示例代码

    这篇文章主要介绍了React Native 集成jpush-react-native的示例代码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-08-08
  • react 下拉框内容回显的实现思路

    react 下拉框内容回显的实现思路

    这篇文章主要介绍了react 下拉框内容回显,实现思路是通过将下拉框选项的value和label一起存储到state中, 初始化表单数据时将faqType对应的label查找出来并设置到Form.Item中,最后修改useEffect,需要的朋友可以参考下
    2024-05-05
  • 详解React开发必不可少的eslint配置

    详解React开发必不可少的eslint配置

    本篇文章主要介绍了详解React开发必不可少的eslint配置,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-02-02
  • 阿里低代码框架lowcode-engine自定义设置器详解

    阿里低代码框架lowcode-engine自定义设置器详解

    这篇文章主要为大家介绍了阿里低代码框架lowcode-engine自定义设置器示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-02-02
  • 在React中实现代码热重载(HMR)的操作步骤

    在React中实现代码热重载(HMR)的操作步骤

    在现代 React 开发中,代码热重载(HMR)是一项极大提升开发效率的技术,它允许在不刷新整个页面的情况下,实时更新模块代码,从而保留应用状态,避免因页面刷新导致的状态丢失,本文将深入探讨如何在 React 项目中实现 HMR,包括其原理、配置步骤以及最佳实践
    2025-05-05
  • 详解react中useCallback内部是如何实现的

    详解react中useCallback内部是如何实现的

    前几天有人在问在useCallback函数如果第二个参数为空数组, 为什么拿不到最新的state值,那么这一章就来分析一下useCallback内部是如何实现的,感兴趣的小伙伴跟着小编一起来学习吧
    2023-07-07
  • React中updateContainerImpl方法更新容器源码解析

    React中updateContainerImpl方法更新容器源码解析

    updateContainerImpl方法是React中更新容器的核心方法,负责创建和调度更新,通过createUpdate方法创建更新对象,并通过enqueueUpdate方法将其加入Fiber节点的更新队列,本文介绍React中updateContainerImpl方法更新容器源码分析,感兴趣的朋友一起看看吧
    2026-01-01

最新评论