React Hook的用法: Ref + useMemo + 自定义Hook(三)

React Hook的用法
Ref Hook
这个Hook的作用是可以通过他来获取到Dom元素节点,使用起来非常方便。
关键代码如下:

const xxxEle = useRef(initialValue);
1
useRef返回一个ref变量,并接受一个初始值 initialValue 这个传入的初始值会复制给useRef返回变量的 .current 属性上(这里就是 xxxEle.current)。如果没有需要传入的初始值的话,一般直接传入 null 即可,然后就可以将返回的Ref变量附加在具体的dom元素上。类似下面

<div ref={divEle}></div>
1
这样 xxxEle.current 属性就会一直指向该 Dom元素。

那么我们是否能够通过 Ref获取函数子组件呢?就类似在class 组件中父组件通过ref属性获取子组件的实例。答案是不能,因为只有class组件才有实例,函数本身是没有实例对象的。比如看下面这个例子,设计了有一个函数组件,使用同样的方式可以获取对应的 div元素的dom信息,但是却获取不了函数子组件的信息,打开控制台会显示null。

在线Demo

useMemo Hook
一句话概括Memo的作用是把“创建”函数和依赖项数组作为参数传入 useMemo,它仅会在某个依赖项改变时才重新计算 memoized 值。这种优化有助于避免在每次渲染时都进行高开销的计算。

Memo Hook 使用起来和 Effect Hook 非常的相似,关键代码如下:

 useMemo(fn,[params]) 
1
第一个参数是一个执行函数, 该函数(fn)会在该函数组件刚创建的时候执行一次,
后面的参数是一个数组,数组中可以登记该函数组件中的变量,只有在第二个参数登记过的变量变化时才会再次执行fn函数。这就实现了有条件的去执行子组件函数中的部分逻辑了,从而实现减少了性能开销。
下面设计了一个说明该作用的例子。在父组件中控制两个变量 age 和count,并可以通过按钮去改变对应的值。子组件直接接受并展示父组件传递过来的这两个变量。
但是只有当父组件中 age 的值发生改变时,才会运行 ageChange 这个函数
关键代码如下:

import React, { useMemo } from "react";
1
从React 中引入 useMemo这个钩子。
在子组件中:

  const ageVal = useMemo(() => ageChange(age), [age]);
1
子组件使用useMomo这个Hook,并在等二个参数中登记age这个变量,那只有父组件中age变量发生改变的时候才会运行 ageChange的方法,并且该函数经过ageChange业务处理后返回一个值(这里就是age本身)供子函数使用。

在线Demo

自定义Hook
通过前面两篇文章总结了业务中常见的几种React 提供的Hook, 除了React提供的Hook之外,当然开发者也可以根据自身业务场景需要开发出特定的Hook。可以说Hook天生自带轮子光环,用的好的话对平常中的业务开发是非常有用的,这里举一个例子,开发一个监听页面放缩的Hook并返回当前浏览器的尺寸。

在线Demo
————————————————
版权声明:本文为CSDN博主「问白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_38080573/article/details/104898950

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Hook Form是一个用于处理表单的库,它可以帮助开发人员简化表单处理的过程。它提供了一种使用React Hook的方式来处理表单数据的方法。 在给出的代码示例中,父组件使用了React Hook Form来处理表单。它使用useState来管理一个名为isEdit的状态变量,用于控制是否处于编辑状态。当点击编辑按钮时,isEdit被设置为true,显示保存按钮;当点击保存按钮时,调用子组件的changeVal方法,并通过ref传递给子组件。子组件通过useImperativeHandle来暴露changeVal方法,当调用该方法时,会进行表单校验并通过props将isEdit的值传递给父组件的setIsEdit方法,从而切换编辑状态。 子组件中使用了antd的Form和Input组件来渲染表单,并根据props中的isEdit值来控制Input组件的禁用状态。通过forwardRefref传递给子组件,以便在父组件中可以调用子组件的方法。 综上所述,React Hook Form是一个用于简化表单处理的库,它可以提供一种使用React Hook的方式来处理表单数据。在给出的代码示例中,父组件使用React Hook Form来处理表单,并通过useState、useRef和useImperativeHandle等Hook函数来管理表单状态和调用子组件的方法。子组件使用antd的Form和Input组件来渲染表单,并通过props中的isEdit值来控制Input组件的禁用状态。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* [react hook 父组件提交子组件form](https://blog.csdn.net/weixin_55556204/article/details/114363883)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *3* [codemod:将React Hook Form V6迁移到V7变得简单](https://download.csdn.net/download/weixin_42117224/18392880)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值