深度解析:Free自由协议增发逻辑技术开发详细丨Free模式系统开发项目方案讲解

本文涉及的产品
全局流量管理 GTM,标准版 1个月
云解析 DNS,旗舰版 1个月
云解析DNS,个人版 1个月
简介: 深度解析:Free自由协议增发逻辑技术开发详细丨Free模式系统开发项目方案讲解

本文探讨ahooks 对 DOM 类 Hooks 使用规范,以及在《free dom自由协议质押系统》开发过程中

源码是如何去做处理的,有需求和问题的朋友可以来探讨。

这一章节,大部分参考官方文档的 DOM 类 Hooks 使用规范[1]。

一点,ahooks 大部分 DOM 类 Hooks 都会接收 target 参数,本文由V_StPv888整理发布表示要处理的元素。

target 支持三种类型 React.MutableRefObject(通过 useRef 保存的 DOM)、HTMLElement、() => HTMLElement(一般运用于 SSR 场景)。

第二点,DOM 类 Hooks 的 target 是支持动态变化的。如下所示:

export default () => {

const [boolean, { toggle }] = useBoolean();

const ref = useRef(null);

const ref2 = useRef(null);

const isHovering = useHover(boolean ? ref : ref2);

return (

<>

  <div ref={ref}>{isHovering ? 'hover' : 'leaveHover'}</div>

  <div ref={ref2}>{isHovering ? 'hover' : 'leaveHover'}</div>

</>

);

};

那 ahooks 是怎么处理这两点的呢?

getTargetElement

获取到对应的 DOM 元素,这一点主要兼容一点的入参规范。

假如是函数,则取执行完后的结果。

假如拥有 current 属性,则取 current 属性的值,兼容React.MutableRefObject 类型。

后就是普通的 DOM 元素。

export function getTargetElement(target: BasicTarget, defaultElement?: T) {

// 省略部分代码...

let targetElement: TargetValue;

if (isFunction(target)) {

// 支持函数获取

targetElement = target();

// 假如 ref,则返回 current

} else if ('current' in target) {

targetElement = target.current;

// 支持 DOM

} else {

targetElement = target;

}

return targetElement;

}

useEffectWithTarget

这个方法,主要是为了支持第二点,支持 target 动态变化。

其中 packages/hooks/src/utils/useEffectWithTarget.ts 是使用 useEffect。

import { useEffect } from 'react';

import createEffectWithTarget from './createEffectWithTarget';

const useEffectWithTarget = createEffectWithTarget(useEffect);

export default useEffectWithTarget;

另外 其中 packages/hooks/src/utils/useLayoutEffectWithTarget.ts 是使用 useLayoutEffect。

import { useLayoutEffect } from 'react';

import createEffectWithTarget from './createEffectWithTarget';

const useEffectWithTarget = createEffectWithTarget(useLayoutEffect);

export default useEffectWithTarget;

两者都是调用的 createEffectWithTarget,只是入参不同。

直接重点看这个 createEffectWithTarget 函数:

createEffectWithTarget 返回的函数useEffectWithTarget接受三个参数,前两个跟 useEffect 一样,第三个就是 target。

useEffectType 就是 useEffect 或者 useLayoutEffect。注意这里调用的时候,没传第二个参数,也就是每次都会执行。

hasInitRef 判断是否已经初始化。lastElementRef 记录的是后一次 target 元素的列表。lastDepsRef 记录的是后一次的依赖。unLoadRef 是执行完 effect 函数(对应的就是 useEffect 中的 effect 函数)的返回值,在组件卸载的时候执行。

一次执行的时候,执行相应的逻辑,并记录下后一次执行的相应的 target 元素以及依赖。

后面每次执行的时候,都判断目标元素或者依赖是

相关文章
|
6天前
|
安全 Java UED
深度解析Java中方法内的异步调用实践与应对方案
深度解析Java中方法内的异步调用实践与应对方案
16 1
|
6天前
|
运维 监控 API
CloudStack 中的IP地址状态解析:Allocated、Reserved与Free
CloudStack 中的IP地址状态解析:Allocated、Reserved与Free
16 9
|
2天前
|
数据可视化 前端开发 大数据
商场智能导视系统深度解析,AR与大数据融合创新商业运营模式
**商场智能导视系统提升购物体验:** 通过三维电子地图、AR导航、AR营销、VR全景导购及可视化数据,解决顾客寻路困扰,增强店铺曝光,简化招商流程,优化商场管理,借助科技创新驱动顾客满意度、品牌曝光度及运营效率的全面提升。
13 0
商场智能导视系统深度解析,AR与大数据融合创新商业运营模式
|
5天前
|
存储 缓存 运维
云计算中的服务器选型与配置:技术深度解析
【6月更文挑战第29天】云计算服务器选型与配置深度解析:关注业务需求、技术要求及成本效益。重点包括CPU、内存、存储和网络配置的优化,结合负载均衡、缓存、虚拟化和自动化运维策略,以提升性能和效率,确保云服务的稳定与高效。
|
6天前
|
Java 程序员
程序技术好文:解析器组合子
程序技术好文:解析器组合子
|
7天前
|
缓存 监控 Java
深入解析Nacos配置中心的动态配置更新技术
深入解析Nacos配置中心的动态配置更新技术
|
1天前
|
安全 测试技术 网络安全
网络安全中的渗透测试与风险评估:技术深度解析
【7月更文挑战第3天】在网络安全领域,渗透测试和风险评估是两种不可或缺的技术手段。通过模拟黑客的攻击手段来发现系统中的安全漏洞,以及通过系统性的方法来识别和评估潜在的风险和威胁,两者共同为组织提供了全面的网络安全保障。随着技术的不断发展和网络环境的日益复杂,渗透测试和风险评估的重要性将日益凸显。因此,网络安全从业者应不断学习和掌握这两种技术,以应对日益严峻的网络安全挑战。
|
1天前
|
网络协议 Linux 分布式数据库
【Linux】DNS系统,ICMP协议,NAPT技术详解
NAPT(Network Address Port Translation),也被称为端口地址转换,是一种NAT(网络地址转换)的形式。NAPT允许多个设备在内部网络上使用私有IP地址,并通过单个公共IP地址与外部网络进行通信。NAPT通过改变传输层的端口号来实现这一点,从而允许多个内部设备共享同一个公共IP地址。
8 0
|
2天前
|
安全 编译器 测试技术
PHP 8新特性深度解析及其对现代Web开发的影响
本文旨在深入探讨PHP 8的新增特性及其在现代Web开发中的应用与影响。通过分析PHP 8引入的类型系统、性能改进、语言结构更新等关键变化,文章将展示这些新特性如何提升代码质量、加快执行速度,以及简化开发流程。引用权威数据和案例研究,结合科学方法论,本文将论证PHP 8为开发者带来的具体益处,并预测其对未来Web技术趋势的潜在影响。
|
3天前
|
自然语言处理 Java 测试技术
Java中的行为驱动开发(BDD)方法论解析
Java中的行为驱动开发(BDD)方法论解析

推荐镜像

更多