Rect Native bridging 源码分析--Bool.h

代码目录:

复制代码
packages/react-native/ReactCommon/react/bridging/Bool.h

源码:

cpp 复制代码
/*
 * Copyright (c) Meta Platforms, Inc. and affiliates.
 *
 * This source code is licensed under the MIT license found in the
 * LICENSE file in the root directory of this source tree.
 */

#pragma once

#include <react/bridging/Base.h>

namespace facebook::react {

template <>
struct Bridging<bool> {
  static bool fromJs(jsi::Runtime & /*unused*/, const jsi::Value &value)
  {
    return value.asBool();
  }

  static bool toJs(jsi::Runtime & /*unused*/, bool value)
  {
    return value;
  }
};

} // namespace facebook::react

概述

该头文件隶属于 facebook::react 命名空间,是 React Native JSI(JavaScript Interface)桥接体系的一部分,专门提供 C++ bool 类型与 JSI 布尔类型 之间的双向桥接实现。它通过 Bridging 模板特化,为布尔类型提供轻量、高效的跨语言数据转换能力,支撑 C++ 层与 JS 层之间的布尔值传递。

核心命名空间

cpp 复制代码
facebook::react

所有桥接相关结构体与方法均位于该顶层命名空间下,与 React 框架的其他桥接组件(如集合类型桥接)保持统一命名空间规范。

核心桥接结构体:Bridging<bool> 模板特化

模板定义

cpp 复制代码
template <>
struct Bridging<bool>;
  • 类型:Bridging 通用模板的显式特化(针对 bool 类型)
  • 功能:为 C++ 基础布尔类型提供专属的 JS 双向转换实现,遵循 React 桥接体系的统一接口规范
  • 适用场景:C++ 层与 JS 层之间的布尔值数据交互(如状态标记、开关配置等场景的跨语言传递)

核心方法

该结构体提供两个静态方法,分别实现 bool 类型的双向转换,方法均为静态且无额外开销,支持直接调用。

1. fromJs 方法:JS 布尔类型 → C++ bool 类型
方法签名
cpp 复制代码
static bool fromJs(jsi::Runtime & /*unused*/, const jsi::Value &value)
功能描述

将 JSI 中的布尔值(封装在 jsi::Value 中)转换为 C++ 原生 bool 类型。

参数说明
参数名 类型 说明
rt jsi::Runtime & JSI 运行时环境引用,此处未使用(布尔类型转换无需运行时上下文),参数占位符标注为 /*unused*/
value const jsi::Value & 常量引用,封装了 JS 层传递的布尔值的 JSI 容器对象
返回值
  • 类型:bool
  • 说明:返回从 jsi::Value 中提取的原生布尔值,与 JS 层布尔值保持一致(true/false 一一映射)
实现细节

调用 jsi::ValueasBool() 成员方法,直接提取内部封装的布尔值,无额外数据处理,转换效率极高。

2. toJs 方法:C++ bool 类型 → JS 布尔类型
方法签名
cpp 复制代码
static bool toJs(jsi::Runtime & /*unused*/, bool value)
功能描述

将 C++ 原生 bool 类型转换为 JS 层可识别的 JSI 布尔类型(直接返回原生 bool,JSI 可自动适配为 JS 布尔值)。

参数说明
参数名 类型 说明
rt jsi::Runtime & JSI 运行时环境引用,此处未使用(布尔类型转换无需运行时上下文),参数占位符标注为 /*unused*/
value bool C++ 原生布尔值,待转换为 JS 层布尔值
返回值
  • 类型:bool
  • 说明:直接返回输入的 C++ bool 值,JSI 框架会自动将其封装为 JS 层的 Boolean 类型(true 对应 JS truefalse 对应 JS false
实现细节

无额外转换逻辑,直接透传 C++ 布尔值,利用 JSI 的原生类型适配能力完成最终的 JS 类型映射,兼顾简洁性与效率。

核心特性总结

  1. 轻量高效:布尔类型转换无额外内存分配与复杂逻辑,直接调用 JSI 原生方法或透传值,运行时开销趋近于零。
  2. 接口统一 :遵循 React 桥接体系的 fromJs(JS→C++)/toJs(C++→JS)统一接口规范,与其他类型(集合、基本类型)桥接实现保持一致,降低使用成本。
  3. 无需运行时依赖 :转换过程不依赖 jsi::Runtime 的实际功能,仅保留参数占位符,适配桥接体系的通用方法签名。
  4. 一一映射 :C++ bool 与 JS 布尔值完全双向对应,无数据丢失或类型歧义(truetruefalsefalse)。

注意事项

  1. 该实现是 Bridging 模板的显式特化,仅适用于 bool 类型,无法直接复用至其他数值类型(如 intdouble 需单独特化)。
  2. 依赖 React 桥接基础头文件(react/bridging/Base.h)与 JSI 库(jsi::Runtimejsi::Value),使用时需确保引入对应依赖。
  3. 方法参数 jsi::Runtime & 为占位符,不可删除,否则会破坏与上层桥接工具(如 bridging::fromJs/bridging::toJs)的兼容性。
相关推荐
愚坤9 分钟前
前端真有意思,又干了一年图片编辑器
前端·javascript·产品
OpenTiny社区40 分钟前
这是OpenTiny与开发者一起写下的2025答卷!
前端·javascript·vue.js
有意义1 小时前
从重复计算到无效渲染:用对 useMemo 和 useCallback 提升 React 性能
react.js·面试·前端框架
大头流矢1 小时前
C++的类与对象·三部曲:初阶
开发语言·c++
AAA.建材批发刘哥1 小时前
03--C++ 类和对象中篇
linux·c语言·开发语言·c++·经验分享
哟哟耶耶2 小时前
Plugin-安装Vue.js devtools6.6.3扩展(组件层级可视化)
前端·javascript·vue.js
烟袅2 小时前
一文搞懂 useRef:它到底在“存”什么?
前端·react.js
峥无2 小时前
《二叉搜索树:动态数据管理的利器,平衡树的基石》
开发语言·c++·二叉搜索树
CoderCodingNo2 小时前
【GESP】C++五级真题(数论, 贪心思想考点) luogu-B4070 [GESP202412 五级] 奇妙数字
开发语言·c++·算法
3秒一个大2 小时前
React 中的 useMemo 与 useCallback:性能优化的利器
前端·react.js