首页 > 其他分享 >react学习,实现子组件监听父组件对像的变化

react学习,实现子组件监听父组件对像的变化

时间:2023-06-21 12:02:40浏览次数:51  
标签:useRef const counter react prevCounterRef useState 组件 监听

我们可以结合useEffet,useRef, useState来实现子组件监听父组件对像的变化:

import { useEffect, useRef, useState } from "react";

interface MyProps = {
  counter: number;
};

const MyChildComponent:React.FC<MyProps> = ({ counter }) => { const prevCounterRef = useRef<number>(counter); useEffect(() => { prevCounterRef.current = counter; }, [counter]); const isCounterIncreased = counter > prevCounterRef.current; return ( <> <p>Current counter: {counter}</p> <p>Counter increased: {isCounterIncreased ? "Yes" : "No"}</p> </> ); };
//父组件 const MyParentComponent = () => { const [counter, setCounter] = useState<number>(0); const handleButtonClick = () => { setCounter(counter + 1); }; return ( <> <MyChildComponent counter={counter} /> <button onClick={handleButtonClick}>Increase counter</button> </> ); };


  以上例子,我们定义了一个名为 `MyChildComponent` 的子组件,并在组件的 props 中添加了一个名为 `counter` 的数字型变量。

  在组件中,我们使用 `useRef` 钩子来声明 `prevCounterRef` 引用,并使用 `useEffect` 钩子在 `counter` 变化时更新 `prevCounterRef` 的值,然后将 `prevCounterRef` 的值与 `counter` 进行比较,以判断计数器是否被增加。

  同时,在 `MyParentComponent` 中,我们定义了名为 `counter` 的状态,并将其传递给子组件的 `counter` 属性。

  在父组件的按钮单击事件中,我们使用 `setCounter` 函数更新 `counter` 的值,从而触发子组件的重新渲染过程。

标签:useRef,const,counter,react,prevCounterRef,useState,组件,监听
From: https://www.cnblogs.com/johnnyzhao/p/17495907.html

相关文章

  • 使用RocketMQ组件对请求做削峰处理
    内容rocketMQ基本介绍使用MQ,将购票流程一分为二。目前系统的吞吐量低,用户从购买车票到拿到票花费的时间较长。增加排队购票功能。排队提示loading。购票时序图目前的时序图,用户发送购票请求,服务端校验验证码,拿令牌,拿锁,然后选座购票,结束流程才会返回。服务器执行时间太长。......
  • 开源组件
    这8个Winform开源项目还有多少人在用?_控件_https_WinForm(sohu.com)SunnyUI:SunnyUI.NET是基于.NETFramework4.0+、.NET6、.NET7框架的C#WinForm开源控件库、工具类库、扩展类库、多页面开发框架。(gitee.com)......
  • 解决Excel 互操作错误"检索COML类工厂中 CLSID为 {00024500-0000-0000-C000-000000000
    解决Excel互操作错误"检索COML类工厂中CLSID为{00024500-0000-0000-C000-000000000046}的组件时失败,原因是出现以下错误:80070005"\comexp.msc-32......
  • 【React工作记录一百一十六】前端小知识点扫盲笔记记录14
    前言我是歌谣放弃很容易但是坚持一定很酷微信公众号关注前端小歌谣带你进入前端巅峰交流群今天继续对前端知识的小结根据每个元素i属性进行排序<!DOCTYPEhtml><htmllang="en"> <head> <metacharset="UTF-8"/> <metahttp-equiv="X-UA-Compatible"content="IE=edge&......
  • 【React工作记录一百一十七】hook项目实例之原始数据形成ant design table表格
    前言大家好我是歌谣由于项目最近使用的数据统一由postgrest定义所以返回的数据只能是各个表之间的层级关系数据格式[{"id":1,"code":"JP","name":"皮夹克","t_base_style":[{"id":66,"code&......
  • 从0到1构造自定义限流组件
    一背景在系统高可用设计中,接口限流是一个非常重要环节,一方面是出于对自身服务器资源的保护,另一方面也是对依赖资源的一种保护措施。比如对于Web应用,我限制单机只能处理每秒1000次的请求,超过的部分直接返回错误给客户端。虽然这种做法损害了用户的使用体验,但是它是在极端并发......
  • React - 31 redux和react-redux的归纳梳理
    如果使用redux1.把reducer/状态按照模块进行划分和管理;把所有模块的reducer合并为一个即可!!2.每一次任务派发,都会把所有模块的reducer,依次去执行,派发时候传递的行为对象(行为标识)是统一的!!所以我们要保证各个模块之间,派发的行为标识的唯一性!!>派发行为标识的统一管理!!3.需......
  • 监听短信并判断是否未读
    finalStringSMS_RECEIVED="android.provider.Telephony.SMS_RECEIVED";BroadcastReceiverSMSbr=newBroadcastReceiver(){@OverridepublicvoidonReceive(Contextcontext,Intentintent){Bundleb......
  • React 性能優化:使用 memo、useCallback、useMemo
    在寫網頁時,我們通常習慣把一個頁面切割成很多的元件(Component),讓我們容易組織與管理頁面的組成。但是在React中複雜的元件關係,如果沒有經過優化,將有可能會造成性能上的問題。在FunctionComponent中,重新渲染(re-render)很輕易就會被觸發,少量的元件時還不會發生太大的問......
  • 微信小程序开发实现星星评分组件
    微信小程序开发实现星星评分组件问题背景小程序开发中经常会碰到需要评分的场景,比如用户满意度调查等,本文介绍微信小程序实现打星评分的一种方案。实现效果如下:截图2问题分析话不多说,直接上代码。(1)index.wxml文件代码如下:<viewclass="vertical-star-item">......