React实现Vue的watch监听属性方式

 更新时间:2024年01月25日 08:31:43   作者:一只小可乐吖  
这篇文章主要介绍了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中使用useEffect及踩坑记录

    react中使用useEffect及踩坑记录

    这篇文章主要介绍了react中使用useEffect及踩坑记录,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-08-08
  • React 组件中实现事件代理

    React 组件中实现事件代理

    React的事件系统和浏览器事件系统相比,主要增加了两个特性:事件代理、和事件自动绑定,本文主要介绍了React 组件中实现事件代理,具有一定的参考价值,感兴趣的可以了解一下
    2024-01-01
  • ReactNative列表ListView的用法

    ReactNative列表ListView的用法

    本篇文章主要介绍了ReactNative列表ListView的用法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-08-08
  • React实现页面状态缓存(keep-alive)的示例代码

    React实现页面状态缓存(keep-alive)的示例代码

    因为 react、vue都是单页面应用,路由跳转时,就会销毁上一个页面的组件,但是有些项目不想被销毁,想保存状态,本文给大家介绍了React实现页面状态缓存(keep-alive)的代码示例,需要的朋友可以参考下
    2024-01-01
  • react中使用redux-persist做持久化储存的过程记录

    react中使用redux-persist做持久化储存的过程记录

    这篇文章主要介绍了react中使用redux-persist做持久化储存的相关资料,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2024-01-01
  • 关于react-router中的Prompt组件使用心得

    关于react-router中的Prompt组件使用心得

    这篇文章主要介绍了关于react-router中的Prompt组件学习心得,Prompt组件作用是,在用户准备离开该页面时, 弹出提示, 返回true或者false, 如果为true, 则离开页面, 如果为false, 则停留在该页面,本文结合示例代码介绍的非常详细,需要的朋友可以参考下
    2023-01-01
  • Input标签自动校验功能去除实现

    Input标签自动校验功能去除实现

    这篇文章主要为大家介绍了Input标签的自动拼写检查功能去除实现示例详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-07-07
  • React类组件和函数组件对比-Hooks的简介

    React类组件和函数组件对比-Hooks的简介

    Hook 是 React 16.8 的新增特性,它可以让我们在不编写class的情况下, 使用state以及其他的React特性(比如生命周期,这篇文章主要介绍了React类组件和函数组件对比-Hooks的介绍及初体验,需要的朋友可以参考下
    2022-11-11
  • React 条件渲染最佳实践小结(7种)

    React 条件渲染最佳实践小结(7种)

    这篇文章主要介绍了React 条件渲染最佳实践小结(7种),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • 详解使用create-react-app快速构建React开发环境

    详解使用create-react-app快速构建React开发环境

    这篇文章主要介绍了详解使用create-react-app快速构建React开发环境,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2018-05-05

最新评论