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)的兼容性。
相关推荐
清酒难咽14 小时前
算法案例之递归
c++·经验分享·算法
Easonmax15 小时前
零基础入门 React Native 鸿蒙跨平台开发:7——双向滚动表格实现
react native·react.js·harmonyos
Easonmax15 小时前
零基础入门 React Native 鸿蒙跨平台开发:6——竖向滚动表格实现
react native·react.js·harmonyos
z203483152015 小时前
C++对象布局
开发语言·c++
戌中横15 小时前
JavaScript——Web APIs DOM
前端·javascript·html
Beginner x_u15 小时前
如何解释JavaScript 中 this 的值?
开发语言·前端·javascript·this 指针
张张努力变强16 小时前
C++ Date日期类的设计与实现全解析
java·开发语言·c++·算法
HWL567916 小时前
获取网页首屏加载时间
前端·javascript·vue.js
沉默-_-16 小时前
力扣hot100滑动窗口(C++)
数据结构·c++·学习·算法·滑动窗口
速易达网络16 小时前
基于RuoYi-Vue 框架美妆系统
前端·javascript·vue.js