React Native 资源包拆分实战分析

 更新时间:2023年08月01日 09:31:02   作者:涅槃快乐是金  
这篇文章主要为大家介绍了React Native 资源包拆分实战分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪

Native加载多个 JS Bundle

客户端会先加载公共基础包,加载完成后,再加载业务包。

安卓端加载多个 JS Bundle

先加载公共基础包,安卓端需要在创建 ReactNativeHost 实例的时候重写 getBundleAssetName()方法或 getJSBundleFile()方法,返回公共基础包的本地路径,然后再调用 ReactNativeHost实例的 getReactInstanceManager() 方法触发 ReactInstanceManager实例的创建,最后调用 createReactContextInBackground()方法来触发 ReactNative 的初始化流程。

// 安卓端代码示例 - 加载公共基础包
ReactNativeHost RNHost = new ReactNativeHost(application) {
  @Nullable 
  @Override 
  protected String getBundleAssetName() {
    return "Assets目录下的common.android.bundle路径";
  }
  @Nullable 
  @Override 
  protected String getJSBundleFile() {
    return "本地磁盘中的common.android.bundle路径";
  }
}
ReactInstanceManager bridge = RNHost.getReactInstanceManager();
if (!bridge.hasStartedCreatingInitialContext()) {
  bridge.createReactContextInBackground();
}

安卓端ReactNative在加载完公共基础包后,会回调ReactInstanceManager 实例中注册的所有 ReactInstanceEventListeneronReactContextInitialized()方法,可以在onReactContextInitialized()回调方法中加载业务包。

通过使用上文中的 ReactInstanceManager 实例的 getCurrentReactContext()获取到当前的 ReactContext 上下文对象,再调用上下文对象的 getCatalystInstance()方法获取 CatalystInstance 实例,最终调用该实例的 loadScriptFromFile() 方法完成业务包的加载。

// 安卓端代码示例 - 加载业务包
ReactContext context = RNHost.getReactInstanceManager().getCurrentReactContext();
CatalystInstance catalyst = context.getCatalystInstance();
String fileName = "本地业务包business.android.bundle路径"
catalyst.loadScriptFromFile(fileName, fileName, false);

iOS端加载多个 JS Bundle

先加载公共基础包,iOS端可以使用 RCTBridge 的实例化方法 [RCTBridge initWithBundleURL: moduleProvider: launchOptions:],传入公共基础包的本地路径。

// iOS端代码示例 - 加载公共基础包
NSURL *commonBundleURL = [[NSBundle mainBundle] URLForResource:@"common" withExtension:@"ios.bundle"];//公共基础包路径
RCTBridge *bridge = [[RCTBridge alloc] initWithBundleURL:commonBundleURL moduleProvider:nil launchOptions:launchOptions];

iOS端ReactNative在加载完公共基础包后,会发送 RCTJavaScriptDidLoadNotification 事件全局通知。
可以通过注册监听 RCTJavaScriptDidLoadNotification 事件,然后加载业务包,可以使用RCTCxxBridgeexecuteSourceCode()方法来加载。

这里需要注意的是: executeSourceCode() 方法是 RCTCxxBridge的私有方法。可以用过 Category 的方式将executeSourceCode()方法暴露出来。

// iOS端代码示例 - Category暴露私有方法
@interface RCTBridge (MyCustomerBridge)   
 - (void)executeSourceCode:(NSData *)sourceCode sync:(BOOL)sync;
@end
// iOS端代码示例 - 加载业务包
NSURL *businessBundleURL = [[NSBundle mainBundle] URLForResource:@"business" withExtension:@"ios.bundle"];//业务包路径
NSError *error = nil;
NSData *sourceData = [NSData dataWithContentsOfURL:businessBundleURL options:NSDataReadingMappedIfSafe error:&error];
if (error) { 
  return 
}
[bridge.batchedBridge executeSourceCode:sourceData sync:NO];

以上就是React Native 资源包拆分实战分析的详细内容,更多关于React Native 资源包拆分的资料请关注脚本之家其它相关文章!

相关文章

  • 关于react+antd样式不生效问题的解决方式

    关于react+antd样式不生效问题的解决方式

    最近本人在使用Antd开发时遇到些问题,所以下面这篇文章主要给大家介绍了关于react+antd样式不生效问题的解决方式,文中通过图文以及实例代码介绍的非常详细,需要的朋友可以参考下
    2022-07-07
  • 在React中强制重新渲染的4 种方式案例代码

    在React中强制重新渲染的4 种方式案例代码

    这篇文章主要介绍了在React中强制重新渲染的4 种方式,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2023-12-12
  • React中设置样式style方式

    React中设置样式style方式

    这篇文章主要介绍了React中设置样式style方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 一文详解React Redux设计思想与工作原理

    一文详解React Redux设计思想与工作原理

    最近看项目中使用了 Redux, 便尝试了解一波 Redux 的设计思想与工作原理,所以本文详细的给大家介绍了Redux设计思想与工作原理,需要的朋友可以参考下
    2023-09-09
  • React-three-fiber使用初体验

    React-three-fiber使用初体验

    这篇文章主要为大家介绍了React-three-fiber的使用初体验,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05
  • React框架快速实现简易的Markdown编辑器

    React框架快速实现简易的Markdown编辑器

    这篇文章主要为大家介绍了使用React框架实现简易的Markdown编辑器,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-04-04
  • React使用fullpage.js实现整屏翻页功能

    React使用fullpage.js实现整屏翻页功能

    最近笔者在完成一个移动端小项目的过程中需要实现整屏翻页的效果;调研完毕之后,最终决定使用pullPage.js实现此功能,fullPage.js使用起来比较方便,并且官网上也给了在react项目中使用的demo,本文记录了这个第三方库的使用过程,感兴趣的朋友可以参考下
    2023-11-11
  • react进阶教程之异常处理机制error Boundaries

    react进阶教程之异常处理机制error Boundaries

    在react中一旦出错,如果每个组件去处理出错情况则比较麻烦,下面这篇文章主要给大家介绍了关于react进阶教程之异常处理机制error Boundaries的相关资料,文中通过实例代码介绍的非常详细,需要的朋友可以参考下
    2022-08-08
  • 在React中正确处理异步操作的方法

    在React中正确处理异步操作的方法

    本文全面介绍了在React中处理异步操作的方法、最佳实践及常见坑点,涵盖数据获取、延时任务、用户交互、动画和效果等典型场景,并提供了如useEffect、AbortController、ReactQuery等具体实现示例,感兴趣的朋友一起看看吧
    2025-03-03
  • React+Electron快速创建并打包成桌面应用的实例代码

    React+Electron快速创建并打包成桌面应用的实例代码

    这篇文章主要介绍了React+Electron快速创建并打包成桌面应用,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-12-12

最新评论