当前位置: 首页 > news >正文

react naive 网络框架源码解析

本文取 react native 两个区别很大的版本做分析(0.76.5、0.53.3)

一、0.76.5 版fetch 全流程排查

1、JS 端的实现

  • 随手写一个fetch,点开。

我们这里常用的还是手机端,因此选择 react-native,react-native-windows 那个是 pc 端

在这里插入图片描述

点开后全是 d.ts 文件
在这里插入图片描述

node_modules/@types/node/globals.d.ts 文件里并没有 fetch 的实现,它主要是一些全局类型定义。

对于 react-native 目录,它的网络模块的 js 部分都是集中在node_modules/react-native/Libraries/Network

因此在此目录下搜索,发现是基于 whatwg-fetch js 库
在这里插入图片描述

按照上图搜索方法,然后在此库中找到了 fetch,fetch 是基于 xhr,而 xhr 由XMLHttpRequest 构造实例对象

在这里插入图片描述

点开XMLHttpRequest 类有多个实现,我们这里紧紧抓住 react-native 库即可,后文会讲到 react-native-windows
在这里插入图片描述

然后又到了 d.ts 的无用环节
在这里插入图片描述

2、原生端实现

whatwg-fetch 中使用的 XMLHttpRequest 是浏览器或 React Native 环境提供的原生 API。

浏览器环境在浏览器环境里,`XMLHttpRequest` 是由浏览器内核实现的,属于浏览器的原生 API。通常是用 C++ 编写的,代码未开源,只能通过W3C 的标准文档看React Native 环境在 React Native 中,`XMLHttpRequest` 是在 `node_modules/react-native/Libraries/Network` 目录下实现的。

然后我们在Libraries/Network中可以看到有个熟悉的 Android.js、IOS.js 跨端文件实现,然后继续点开它

这里有个比较有意思的:绿色框部分 NativeNetworkingAndroid.js 显示成了 NativeNet,说明 working 也属于文件命名的一个默认省略部分,类似于平台indexAndroid.js 会省略成 index.js
在这里插入图片描述

发现这个是基于 TurboModule,这个属于新版 rn 引入的桥接模式,类似于 NativeModule。

在这里插入图片描述

然后我们搜索TurboModule 发现线索不明显,因为TurboModule 属于一个类,导包太多,那么我们猜测导包TurboModule了主要还是使用其原生提供的api 能力,其中最高频的肯定是 sendRequest 方法,因此搜索如下:

发现 2 个文件,上面一个是 java 的方法签名,这个就查看源码无异议,因此我们看下面一个

在这里插入图片描述

打开 sendRequest 方法,发现 一个关键调用 sendRequestInternal
在这里插入图片描述

接着往下面滚动有 okhttp build 的痕迹

在这里插入图片描述

那么对于 okhttp 熟知的都知道,它肯定会构建 OkhttpClient 对象用于网络请求,因此直接搜索OkHttpClient,这里我是先发现了所以直接搜索了OkHttpClient client,到此可以断定此版本的 fetch 方法是基于 okhttp 构建的 xhr 环境实现

在这里插入图片描述

二、0.76.5版axios

经过上文的排查我们知道网络请求肯定会调用 request,因此我们直接在 axios 库中搜索 request,很显然的看到也是调用 XMLHttpRequest,因此axios 也是 okhttp 实现的。

在这里插入图片描述

三、0.53.3版fetch

经过上面的流程我们达成一个共识:

1、它的网络请求 js 端必定会调用 request 方法

2、app 端的核心 sdk 就是集成在 node_module/react-native 目录中

3、XMLHttpRequest 底层由okhttp 实现,它构建了类似 web 的一套环境

因此我们打开0.53.3 项目直接 搜索 request,发现了 OkhttpCallUtil.java,那这个更直接了,不用排查了

在这里插入图片描述

四、react-native-windows 作用

上文讲到 app 端的核心 sdk 就是集成在 node_module/react-native 目录中,那么对于 react-native-windows 干啥的,我们直接搜 request,发现其中最高频使用的文件叫 WinRTHttpResource.cpp。

WinRTHttpResource.cpp 主要基于 Windows 运行时(Windows Runtime,简称 WinRT)框架进行封装,这个与 App 构建的 XHR 有点区别,因此单独抽出一个目录。

在这里插入图片描述

五、总结与收获

react native版本fetchaxios
0.76.5OkhttpOkhttp
0.53.3Okhttp-
  • react native app 端不管是 fetch、axios 都是使用的 okhttp(属于 app 使用 okhttp 构建出来类似于浏览器的 xhr环境)

  • windows 桌面端网络请求基于 winrt,因此会多出一个 react-native-windows 包,而非合并到 react-native目录

  • 搜索源码方便:都会在 js 端调用 request 方法

相关文章:

react naive 网络框架源码解析

本文取 react native 两个区别很大的版本做分析(0.76.5、0.53.3) 一、0.76.5 版fetch 全流程排查 1、JS 端的实现 随手写一个fetch,点开。 我们这里常用的还是手机端,因此选择 react-native,react-native-windows …...

DID在元宇宙的应用爆发:数字身份资产化与跨平台迁移——解析Decentraland等项目的虚拟身份全链路实现

元宇宙的兴起催生了多维度的数字身份需求,但传统虚拟身份系统受限于中心化架构,面临数据孤岛、身份碎片化、资产归属模糊等核心挑战。本文以Decentraland、The Sandbox、Somnium Space等顶级元宇宙平台为研究对象,探讨去中心化身份&#xff0…...

MySQL的内置函数与复杂查询

目录 前言 一、聚合函数 1.1日期函数 1.2字符串函数 1.3数学函数 1.4其它函数 二、关键字周边 2.1关键字的生效顺序 2.2数据源 2.3可以使用聚合函数的关键字 前言 在前面几篇文章中,讲解了有关MySQL数据库、数据库表的创建、数据库表的数据操作等等。本文我…...

mysql中select 1 from的作用

在MySQL中,SELECT 1 FROM ... 是一个常见的SQL写法,通常用于以下场景: 1. 作用与原理 SELECT 1 的本质是返回一个常数值(即数字1),且不依赖表中的实际数据。 它的核心作用是快速验证逻辑条件是否成立&…...

Linux中 du (详解)、 df (详解)和 free(详解)以及它们的区别

目录 du命令 df命令 free命令 du/df/free区别 Tree du命令 功能:用于计算文件或目录所占用的磁盘空间大小。它会递归地遍历指定目录下的所有文件和子目录,统计它们占用的磁盘块数,从而得出占用的空间大小。常用选项: -h&…...

ETL交通行业案例丨某大型铁路运输集团ETL数据集成实践

在广袤的祖国边疆,一条条钢铁动脉承载着区域经济发展的重要使命。某大型铁路运输集团作为区域交通枢纽的运营主体,管辖着横跨多个省、区的铁路网络,运营里程超3000公里,每日承载着数以万计的客货运输任务。随着"数字中国&quo…...

【数据挖掘】Apriori算法

Apriori算法是经典的关联规则挖掘算法,用于从事务型数据库中发现频繁项集和强关联规则,特别常用于购物篮分析等场景。 🧠 核心思想(Apriori原则) 一个项集是频繁的,前提是它的所有子集也必须是频繁的。 即&…...

7.9/Q1,Charls最新文章解读

文章题目:Association between urbanization levels and frailty among middle-aged and older adults in China: evidence from the CHARLS DOI:10.1186/s12916-025-03961-y 中文标题:中国中老年人城市化水平与虚弱程度之间的关联&#xff1…...

从入门到登峰-嵌入式Tracker定位算法全景之旅 Part 7 |TinyML 定位:深度模型在 MCU 上的部署

Part 7 |TinyML 定位:深度模型在 MCU 上的部署 本章聚焦如何在 ESP32-S3 平台上,通过 TinyML 将深度学习模型应用到定位场景,包括特征提取、模型剪枝与量化、TensorFlow Lite for Microcontrollers 部署,以及在线微调与自适应策略。 一、为什么要用 TinyML? 非线性特征挖…...

Codeforces Round 1023 (Div. 2) ABC

链接 Dashboard - Codeforces Round 1023 (Div. 2) - Codeforces A 将数组a分成两组&#xff0c;使得gcd(b) ! gcd(c) 思路 gcd(a,b) < min(a,b) 求数组a的max&#xff0c;min 如果数组a都一样无解 &#xff08;即max min 否则有解&#xff1a;让是max的一组&…...

56. 合并区间

给定若干个区间的集合&#xff0c;将重叠的区间合并后&#xff0c;放入一个数组中返回。 具体思路就是按左端点排序后合并区间&#xff0c;因为按左端点排序后&#xff0c;可以确保每次合并都是以最小元素为合并后区间的起始&#xff0c;并且按左端点排序可以方便合并&#xff…...

Docker安装使用

1.Docker简介 Docker是一个开源的应用容器引擎&#xff1b;是一个轻量级容器技术&#xff1b; Docker支持将软件编译成一个镜像&#xff1b;然后在镜像中各种软件做好配置&#xff0c;将镜像发布出去&#xff0c;其他使用者可以直接使用这个镜像&#xff1b; 运行中的这个镜…...

Linux/AndroidOS中进程间的通信线程间的同步 - POSIX IPC

1 什么是POSIX&#xff1f; POSIX&#xff08;Portable Operating System Interface&#xff09;即可移植操作系统接口&#xff0c;它是IEEE为要在各种UNIX操作系统上运行软件&#xff0c;而定义API的一系列标准的总称。以下为你展开介绍&#xff1a; 产生背景&#xff1a;在…...

5.2创新架构

一、MoE&#xff08;Mixture of Experts&#xff0c;混合专家模型&#xff09; 了解混合专家模型架构&#xff0c;与 Dense 架构相比有什么优劣 是一种提升大模型推理效率和参数利用率的关键技术 核心思想&#xff1a;在模型中增加多个“专家模块”&#xff08;Experts&#x…...

驱动开发系列57 - Linux Graphics QXL显卡驱动代码分析(四)显示区域更新

一&#xff1a;概述 前面在介绍了显示模式设置&#xff08;分辨率&#xff0c;刷新率&#xff09;之后&#xff0c;本文继续分析下&#xff0c;显示区域的绘制&#xff0c;详细看看虚拟机的画面是如何由QXL显卡绘制出来的。 二&#xff1a;相关数据结构介绍 struct qxl_moni…...

疗愈服务预约小程序源码介绍

基于ThinkPHP、FastAdmin和UniApp开发的疗愈服务预约小程序源码&#xff0c;这款小程序在功能设计和用户体验上都表现出色&#xff0c;为疗愈行业提供了一种全新的服务模式。 该小程序源码采用了ThinkPHP作为后端框架&#xff0c;保证了系统的稳定性和高效性。同时&#xff0c…...

力扣118,1920题解

记录 2525.5.6 题目&#xff1a; 思路&#xff1a; 用一个二维数组dp[numRows][numRows]保存每一次动态规划的结果 1.令dp[0][0]1(第一列) 2.找规律 3.得到如下规律(以下情况均为列数大于1) if(col0){ dp[row][col]1 } else { dp[row][col]dp[row-1][col-1]dp[row-1][col] }…...

电池热管理CFD解决方案,为新能源汽车筑安全防线

在全球能源结构加速转型的大背景下&#xff0c;新能源汽车产业异军突起&#xff0c;成为可持续发展的重要驱动力。而作为新能源汽车 “心脏” 的电池系统&#xff0c;其热管理技术的优劣&#xff0c;直接决定了车辆的安全性、续航里程和使用寿命。电池在充放电过程中会产生大量…...

(一)毛子整洁架构(Domain Layer/Repository Pattern/Result Pattern/Error Pattern)

文章目录 项目地址一、整洁架构概念1.1 各个分层的功能1. Domain核心部件2. Application Layer3. Infrastructure layer3. Presenetation layer1.2 项目数据库二、Domain Layer2.1 Apartments 实体1. Current Value Obj2. Money Value Obj3. Apartment 类2.2 User 实体1. User类…...

XSS ..

Web安全中的XSS攻击详细教学&#xff0c;Xss-Labs靶场通关全教程&#xff08;建议收藏&#xff09; - 白小雨 - 博客园跨站脚本攻击&#xff08;XSS&#xff09;主要是攻击者通过注入恶意脚本到网页中&#xff0c;当用户访问该页面时&#xff0c;恶意脚本会在用户的浏览器中执行…...

Github Action部署node项目

Github Action部署node项目 个人学习的时候&#xff0c;作为前端感觉这个CICD基本流程还是有必要了解的&#xff0c;这里记录一下Github Action部署node项目的流程&#xff0c;也算是一个学习的过程 首先肯定是要有一个可运行的node项目 编写部署文件 部署文件放置在.githu…...

高频面试题:设计秒杀系统,用Redis+Lua解决超卖

高频面试题&#xff1a;设计秒杀系统&#xff0c;用RedisLua解决超卖 **1. 问题背景****2. 解决方案&#xff1a;Redis Lua****为什么选择Redis Lua&#xff1f;****核心代码逻辑****Java调用示例&#xff08;Spring Boot&#xff09;** **3. 方案优势****4. 面试回答话术***…...

2、Kafka Replica机制与ISR、HW、LEO、AR、OSR详解

Kafka 作为分布式高可用消息队列&#xff0c;其副本&#xff08;Replica&#xff09;机制是实现高可靠性和数据一致性的核心。本文将系统介绍 Kafka 的 Replica 机制&#xff0c;并详细解释 ISR、HW、LEO、AR、OSR 等关键概念。 一、Kafka Replica机制概述 在分布式系统中&am…...

生成式 AI:从工具革命到智能体觉醒,2025 年的质变与突破

在上海胸科医院的手术室里&#xff0c;一束全息投影正精准勾勒出患者肺部的三维血管模型。主刀医生手持机械臂的瞬间&#xff0c;AI 导航系统已同步完成 200 次路径演算&#xff0c;将毫米级误差控制在 0.3 毫米以内 —— 这个真实发生在 2025 年的临床场景&#xff0c;标志着生…...

安卓基础(拖拽)

当用户长按或拖拽某个视图&#xff08;如按钮、图片&#xff09;时&#xff0c;需要提供视觉反馈&#xff08;即阴影&#xff09;。这行代码通常在拖拽事件的处理逻辑中&#xff0c;例如&#xff1a; view.setOnLongClickListener(v -> {// 创建拖拽阴影DragShadowBuilder …...

IoTDB磁盘I/O性能监控与优化指南

一、磁盘I/O性能观测核心指标 在现代计算机系统中&#xff0c;磁盘I/O性能对整体系统表现至关重要。为有效监控和优化磁盘I/O性能&#xff0c;需关注以下核心指标&#xff1a; ‌I/O读写延迟‌&#xff1a;衡量从发起I/O请求到接收响应的时间间隔。‌IOPS&#xff08;Input/O…...

java每日精进 5.06【框架之功能权限】

0.概述 0.1 整体架构概述 这个RBAC权限系统基于Spring Security和Token认证机制&#xff0c;主要包含以下核心组件&#xff1a; 用户-角色-菜单的多对多关系模型 基于Token的认证流程 细粒度的权限控制&#xff08;菜单权限、按钮权限&#xff09; 灵活的权限配置方式 1…...

静态NAT

实验需求 PC1和PC2通过静态NAT去访问服务器 实验拓扑 图13-1 静态NAT 实验步骤 步骤1&#xff1a;IP地址的配置 PC1的配置 PC2的配置 R1的配置 <Huawei>system-view [Huawei]undo info-center enable [Huawei]sysname R1 [R1]interface g0/0/0 [R1-GigabitEt…...

RabbitMQ-api开发

前言 MQ就是接收并转发消息 核心概念 admin是用户 每个虚拟机上都有多个交换机 快速入门 引入依赖 <dependency><groupId>com.rabbitmq</groupId><artifactId>amqp-client</artifactId><version>5.22.0</version></dependen…...

const MachineTree getMachineTree() ; MachineTree getMachineTree() const; 区别?

这两个函数声明在语法和语义上有明显的区别&#xff0c;它们的用途和行为也不同。让我们逐一分析它们的区别&#xff1a; 1. const MachineTree &getMachineTree(); 这个函数声明表示&#xff1a; 返回类型&#xff1a;const MachineTree &&#xff0c;即返回一个 M…...

使用DevTools工具调试前端页面,便捷脚本,鸿蒙调试webView

参考官方文章 便捷脚本 创建文本&#xff0c;复制修改后缀为bat 建立bat文件 echo off setlocal enabledelayedexpansion:: Initialize port number and PID list set PORT9222 set PID_LIST:: Get the list of all forwarded ports and PIDs for /f "tokens2,5 delims…...

浏览器存储 Cookie,Local Storage和Session Storage

什么是Cookie&#xff1f; 存储容量&#xff1a;一般限制在 4KB 以内。数据有效期&#xff1a;可以设置过期时间&#xff0c;若未设置&#xff0c;则在浏览器关闭时失效。数据共享&#xff1a;在同一域名下&#xff0c;不同页面可以共享cookie数据。并且在每次 HTTP 请求时&am…...

校内周赛题(思维题)

这次周赛的题目没有什么很难的代码实现&#xff0c;基本上都是对思路的把握。 与君共勉&#x1f339; 选取x个数&#xff0c;看能不能使得这x个数相加的结果是奇数。 如果x是偶数&#xff0c;他的分布肯定是一个奇数一个偶数若干个两两配对的奇数若干个两两配对的偶数。 如果…...

在 GitLab 中部署Python定时任务

在 GitLab 中部署定时任务(如每天早8点运行Python脚本并存储结果)可以通过 GitLab CI/CD 结合 计划任务(Scheduled Pipelines) 实现。以下是详细步骤和准备工作: 1. 准备工作 (1) 项目结构准备 确保项目包含: Python脚本(如 main.py):执行核心算法逻辑。 结果存储模…...

学习黑客Windows权限体系

已思考 24 秒 借着 Week 2 Day 4 的号角&#xff0c;我们把权限系统这条「双持长枪」摆上擂台&#xff1a;一边是 Windows DACL/icacls&#xff0c;另一边是 Linux sudoers。你将看到二者在授权语法、常见配置漏洞与提权打法上的一一对照——尤其关注 可写服务&#xff08;Wr…...

DXFViewer进行中2 -> 直线 解析+渲染 ✅已完成

DXFViewer进行中 : -&#xff1e;封装OpenGL -&#xff1e; 解析DXF直线-CSDN博客https://blog.csdn.net/qq_25547755/article/details/147723906 上篇博文 解析dxf直线635条 1. DXFViewer.h #pragma once #include "Application.h" #include <stdio.h> #inc…...

当智能科技遇上医疗行业会帮助疫苗如何方便管理呢?

​ 随着科技的发展&#xff0c;智能科技在医疗行业的应用日益广泛&#xff0c;在疫苗管理方面&#xff0c;温湿度监控设备的安装可以简化管理流程&#xff0c;提高监测效率&#xff0c;降低疫苗损坏的风险。 疫苗管理面临着诸多挑战和需求。疫苗的存储、运输、接种等环节都…...

Excel 数据 可视化 + 自动化!Excel 对比软件

各位Excel小能手们&#xff01;你们有没有过要对比两个Excel表格数据差异&#xff0c;却看得眼睛都花了的经历&#xff1f;其实啊&#xff0c;现在有专门的Excel文件比较软件能帮咱解决这大难题。这软件就是用来快速找出两个或多个Excel表格数据不同之处&#xff0c;还能把修改…...

Selenium模拟人类行为,操作网页的方法(全)

看到有朋友评论问&#xff0c;用selenium怎么模仿人类行为&#xff0c;去操作网页的页面呢&#xff1f; 我想了想&#xff0c;这确实是一个很大的点&#xff0c;不应该是一段代码能解决的&#xff0c; 就像是,如果让程序模拟人类的行为。例如模拟人类买菜&#xff0c;做饭&am…...

LVS负载均衡群集解析:理解LVS-NAT的工作原理

目录 一、LVS群集应用基础 1.群集技术概述 2.LVS虚拟服务器 3.NFS共享存储服务 二、案例&#xff1a;地址转换模式&#xff08;LVS-NAT&#xff09; 1.资源清单 2.修改主机名 3.配置负载调度器&#xff08;LVS上&#xff09; 4.配置节点服务器(web1、web2) 5.测试LVS…...

Leetcode Hot 100最长连续序列

题目描述 思路 思路1 我们对数组进行排序&#xff0c;通过遍历数组&#xff0c;如果前一个数组的值1等于当前数组的值&#xff0c;计数count&#xff0c;如果中断了&#xff0c;计算当前最大连续长度的值ans&#xff0c;并且统计值count重新置为1&#xff0c;最后返回count与…...

【东枫科技】代理英伟达产品:交换机系统

文章目录 总体详细&#xff1a;NVIDIA Spectrum SN5000详细&#xff1a;NVIDIA Spectrum SN2100详细&#xff1a;NVIDIA Spectrum SN4700详细&#xff1a;NVIDIA Spectrum SN2010详细&#xff1a;NVIDIA Spectrum SN4600详细&#xff1a;NVIDIA Spectrum SN3700详细&#xff1a…...

[前端]Javascript获取元素宽度

元素宽度属性对比示意图 ---------------------------------- | 外边距&#xff08;margin&#xff09; | -------------------------------- | | 边框&#xff08;border&#xff09; | | | -------------------------- | | | …...

MySQL + Qwen3-0.5B + Flask + Dify 工作流部署指南

1. 安装MySQL和PyMySQL 安装MySQL # 在Ubuntu/Debian上安装 sudo apt update sudo apt install mysql-server sudo mysql_secure_installation# 启动MySQL服务 sudo systemctl start mysql sudo systemctl enable mysql 安装PyMySQL pip install pymysql 使用 apt 安装 My…...

项目三 - 任务3:学生多态方式喂养宠物

在本次实战中&#xff0c;我们通过创建动物类及其子类&#xff08;猫、狗、鸟&#xff09;&#xff0c;并设计学生类的喂养方法&#xff0c;深入学习了Java中的多态和方法重载。学生类通过重载方式为每种动物提供专门的喂养方法&#xff0c;而通过多态方式则仅用一个方法即可喂…...

TypeScript速成

1、类型推断 这里的str已经推断为string类型&#xff0c;不能像JavaScript一样直接给str赋值number类型 2、类型注解 let str:stringabc 或者 let str:string strabc 3、类型断言 因为typescript会判定这个item可能为undefined类型&#xff0c;但是我们人为可以确定item一…...

CompletableFuture的底层ForkJoinPool

什么是 ForkJoinPool&#xff1f;它和普通线程池&#xff08;ThreadPoolExecutor&#xff09;有什么区别&#xff1f; 答案要点&#xff1a; ForkJoinPool 是 Java 7 引入的线程池&#xff0c;专为 分治任务 设计&#xff0c;支持递归任务拆分&#xff08;Fork&#xff09;和…...

高等数学第五章---定积分(§5.1定积分的概念、性质和应用)

5.1 定积分的概念及性质 一、引例 在学习定积分之前&#xff0c;我们先通过两个具体的例子来感受其思想和方法。 例1 曲边梯形的面积 定义&#xff1a;曲边梯形 由连续曲线 y f ( x ) y f(x) yf(x)&#xff08;假设 f ( x ) ≥ 0 f(x) \ge 0 f(x)≥0 在所讨论的区间上&…...

Java基础学完,继续深耕(0506)SQL--多表关系

多表关系 一对多(多对一) 一对一 多对多 一对多 场景&#xff1a;部门与员工的关系 &#xff08;一个部门下有多个员工&#xff09;。 实现&#xff1a;在数据库表中多的一方&#xff0c;添加字段&#xff0c;来关联一的一方的主键。 现在只是在语法上关联了&#xff0c;…...

python打卡day17

聚类的基础知识 知识点 聚类的指标聚类常见算法&#xff1a;kmeans聚类、dbscan聚类、层次聚类三种算法对应的流程 实际在论文中聚类的策略不一定是针对所有特征&#xff0c;可以针对其中几个可以解释的特征进行聚类&#xff0c;得到聚类后的类别&#xff0c;这样后续进行解释也…...