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)的兼容性。
相关推荐
唐青枫23 分钟前
http-server:别再双击 index.html,一条命令把目录变成网站
前端·javascript
别动我齐刘海1 小时前
机器人运动控制学习2——基础进阶
c++·人工智能·神经网络·学习·目标检测·机器学习·机器人
傻啦嘿哟2 小时前
英雄联盟皮肤爬虫:爬取全皮肤价格与特效,做比价工具
java·c++·爬虫
码匠许师傅2 小时前
【C++ 面试真题】24. 聊聊 C++ 的时间日期处理
java·c++·面试
闻道且行之3 小时前
图片处理助手|泊松融合原理 + C++ 工程实现,seamlessClone 三模式一次讲透
数据库·c++·人工智能·opencv
学习星球3 小时前
Solid.js 实战:拆解官方 RealWorld 项目
开发语言·javascript·vue.js
莫浅子3 小时前
day01-USB架构与枚举
c++·单片机·嵌入式驱动
不会代码的小猴4 小时前
7. JSON
开发语言·c++·笔记·qt·算法·json
沫璃染墨4 小时前
《Qt从零入门系列(六):信号与槽进阶——从多种连接方式到Lambda表达式》
开发语言·c++·qt·代码规范·设计规范·qt5
YuJie5 小时前
JSBridge 基础知识
前端·javascript