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)的兼容性。
相关推荐
lcj25111 分钟前
vector的基本使用 + 手搓成员变量 size capacity begin end operator[] reserve扩容 拷贝构造 赋值析构
开发语言·c++·笔记·面试
柒和远方6 分钟前
每日一学V010: 从 Python 回到前端:一个 AI Native 开发者的 JavaScript 底层基础补全
javascript
liulilittle12 分钟前
C++ do_div 宏
c++
之歆14 分钟前
Day21_电商详情页核心技术实战:从LESS预处理到复杂交互实现
开发语言·前端·javascript·css·交互·less
-To be number.wan16 分钟前
算法日记 | STL-MAP
c++·算法
海鸥两三24 分钟前
基于 Vue 3 + 高德地图的网格规划系统实战(有源码)
前端·javascript·vue.js
楼田莉子24 分钟前
C++20新特性:Range库
开发语言·c++·后端·学习·c++20
字节高级特工26 分钟前
【Linux】深入理解C语言命令行参数与环境变量
linux·c++·人工智能·后端
逸A28 分钟前
某里v2反混淆 codec 化路上踩到的两个隐蔽坑:被清零的 salt 与 opaque loop bound
javascript·人工智能·目标跟踪
linux开发之路30 分钟前
C++项目推荐:eBPF+调度器性能分析框架
linux·c++·ebpf·火焰图·调度器