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::Value 的 asBool() 成员方法,直接提取内部封装的布尔值,无额外数据处理,转换效率极高。

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 true,false 对应 JS false)
实现细节

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

核心特性总结

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

注意事项

  1. 该实现是 Bridging 模板的显式特化,仅适用于 bool 类型,无法直接复用至其他数值类型(如 int、double 需单独特化)。
  2. 依赖 React 桥接基础头文件(react/bridging/Base.h)与 JSI 库(jsi::Runtime、jsi::Value),使用时需确保引入对应依赖。
  3. 方法参数 jsi::Runtime & 为占位符,不可删除,否则会破坏与上层桥接工具(如 bridging::fromJs/bridging::toJs)的兼容性。
相关推荐
虚无境1 小时前
如何用AI帮我写出实用的插件
前端·javascript·ai编程
濮水大叔2 小时前
函数式与对象式:前端架构的两种成本曲线
vue.js·react.js·函数式编程
·present·2 小时前
CSAPP(lecture 4_01)
c语言·c++
zimoyin2 小时前
在 C# 里嵌入 JavaScript:用 Jint 做可热更新的自动化脚本(从入门到踩坑)
javascript·c#·自动化
FPGA小迷弟2 小时前
用 Claude Code 重构遗留系统:从评估到落地的完整实践指南
c++·python·ai·plotly·django·ai编程·claude
程序员-King.3 小时前
【ROS1】Noetic 开发工作流程与常用命令
c++·ubuntu·ros
FRing033 小时前
JavaScript入门到精通二十六(变量提升、函数剩余参数、展开运算符、ES6箭头函数)
开发语言·前端·javascript·es6·箭头函数
云深麋鹿3 小时前
C++ | 基于红黑树实现mymap与myset
开发语言·c++
OpsEye4 小时前
怎么实现大模型的按用户、按应用配额限流?
javascript·ai编程
傲世仙尊5 小时前
string增删查改-insert-erase-replace与find加substr组合技
c++