【转载记录】rn工程启动流程

React Native初次使用遇到的问题 以初学者的心态记录一下 React Native 刚上手遇到的一些问题。问题会持续更新… 阅读详情
一、React Native工程结构分析
1) 初始化RN工程
react-native init LKDemo2
2) 工程目录结构图

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZUf5wHzh-1585552299962)(/Users/a123/Desktop/Flutter/LearnFlutterNodes/images/img16.png)]

3)工程启动流程分析
  • iOS工程或安卓工程一启动,就会加载目录中index.js文件,通过AppRegistry去注册组件,并且把注册完成的组件输出给iOS端或Android端:
// 引入注册组件模块
import {AppRegistry} from 'react-native';
// 引入组件汇总模块
import App from './App';
// 引入输出组件名称
import {name as appName} from './app.json';

// 注册组件,程序主入口
// appName: 注册模块名称
// () => App: 组件类,程序启动会自动加载该类实例化的组件对象
AppRegistry.registerComponent(appName, () => App);
  • 通过Xcode打开iOS工程,或者Android Studio打开Android工程,此处以iOS端为例子。找到AppDelegate.m文件,查看客户端加载方法:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KlJuXPLj-1585552299962)(/Users/a123/Desktop/Flutter/LearnFlutterNodes/images/img17.png)]

  • 代理文件中通过该方法加载JS端输出的模块,注意模块的名称两端必须保持一致:
initWithBridge:bridge moduleName:@"MyRNDemo" initialProperties:nil
  • 代理文件解析加载注释如下
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  // 1. 获取桥接文件
  RCTBridge *bridge = [[RCTBridge alloc] initWithDelegate:self launchOptions:launchOptions];
  // 2. 根据模块加载根视图
  RCTRootView *rootView = [[RCTRootView alloc] initWithBridge:bridge
                                                   moduleName:@"MyRNDemo"
                                            initialProperties:nil];

  rootView.backgroundColor = [[UIColor alloc] initWithRed:1.0f green:1.0f blue:1.0f alpha:1];

  // 3. 设置窗口
  self.window = [[UIWindow alloc] initWithFrame:[UIScreen mainScreen].bounds];
  
  // 4. 设置窗口根控制器的view
  UIViewController *rootViewController = [UIViewController new];
  rootViewController.view = rootView;
  self.window.rootViewController = rootViewController;
  
  // 5. 显示窗口
  [self.window makeKeyAndVisible];
  return YES;
}
4)App.js文件运行步骤
  • 加载React模块,使用其内部的API,比如:jsx语法;
  • 加载React Native原生组件,比如:SafeAreaView, StyleSheet, View, Text,Image等;
  • 自定义组件类,作为模块的输出;
  • 创建样式对象,传入样式对象,根据样式中的对象描述,创建样式表
  • 导出当前模块
/**
 * 撩课学院
 * https://itlike.com
 */

// 1. 加载React模块
import React from 'react';

// 2. 加载原生组件
import {
  SafeAreaView,
  StyleSheet,
  View,
  Text,
  StatusBar,
  Image
} from 'react-native';


// 3. 自定义组件(程序入口组件)
const App: () => React$Node = () => {
  return (
    <>
      <StatusBar barStyle="dark-content" />
      <SafeAreaView style={styles.safeView}>
         <View style={styles.viewStyle}>
           <Image
               style={{width: 168, height: 168}}
               source={{uri: 'http://www.itlike.com/template/simple/res/404/img/xiaoliao.png'}}
           />
           <Text style={styles.textStyle}>小撩陪你开启RN学习之旅!</Text>
         </View>
      </SafeAreaView>
    </>
  );
};

// 4. 创建样式对象
// 传入样式对象,根据样式中的对象描述,创建样式表
const styles = StyleSheet.create({
  safeView: {
    flex: 1
  },
  viewStyle: {
    display: 'flex',
    flex: 1,
    justifyContent:'center',
    alignItems: 'center'
  },
  textStyle: {
    fontSize: 20
  }
});

// 5. 导出当前模块
export default App;
二、React Native语法分析
1)JSX语法

JSX语法是一个比较高级但很直观的JS语法糖。我们在创建View的结构是,可以用类似HTML标签的形式创建,当然最终在编译是还是会转换成JS代码。

  • 函数中只要返回组件,都需要用()包裹
const App: () => React$Node = () => {
  return (
      <View></View>
  );
};
  • 函数中除字符串以外,赋值时都需要用{}包裹
 <SafeAreaView style={styles.safeView}> </SafeAreaView>
 <Image style={{width: 168, height: 168}} source={{uri: 'http://www.itlike.com/template/simple/res/404/img/xiaoliao.png'}}
           />
  • 组件内使用变量时,都需要用大括号包裹,否则会被当成普通字符串处理。
const str = '引擎计划';
<Text>{str}</Text>
2)样式对象文件

内部以键值对的形式,取值如同JS中的对象调用。

const styles = StyleSheet.create({
  viewStyle: {
    display: 'flex',
    flex: 1,
    justifyContent:'center',
    alignItems: 'center'
  }
});
Cortex-M3:为什么 RN 给寄存器起别名只是“语法糖”? **摘要:ARM汇编中的RN伪指令本质上是"语法糖",它仅用于给寄存器赋予有意义的别名(如将R13命名为SP_ADDR),而不会生成任何机器码或影响二进制输出。通过实验验证,编译后别名会被完全替换为原寄存器名,不保留任何痕迹。虽然RN与C语言的#define类似,但它具有作用域限制且严格绑定寄存器名。这种设计的主要价值在于提升代码可读性和可维护性,特别是在复杂场景中(如寄存器角色分配、遵循AAPCS规范时),能显著降低开发者的认知负担。尽管RN不改变程序功能,但作为工程实践中的最佳手段,它通过语义化命名帮助 阅读详情

相关推荐

React Native 源码分析(一)——启动流程

本系列文章,是分析Android 的 React Native 的源码,主要包括以下文章,和以往的源码系列一样,分析主流程的代码,不会细致到每一行(但是比Gradle源码分析,要细致很多),会涉及到java、C++、js等源码。 RN版本是0.64.0 1、React Native 源码分析(一)—— 启动流程 2、React Native 源码分析(二)—— 通信机制 3、React Native 源码分析(三)—— UI渲染流程 4、React Native 源码分析(四)—— 任务调度 5、React

薛瑄的博客 4785

如何运行github上react native项目

写在前面之前就发现百度上,关于下载github上react native项目(下文称RN)运行的方法不全,今天抽空整理下,给大家一点灵感。下载RN项目以react-native-nba-app作为事例https://github.com/wwayne/react-native-nba-app 克隆项目到本地 运行命令$git clone https://github.com/wwayne/rea

邵磊的博客 1万+

rn-project-starter

React Native项目启动器 正在安装 npm i -g rn-project-starter 用法 在react本机项目的根目录上运行rn-start-project。 基本依赖 1.lodash 2.moment 3.native-base 4.react-native-modalbox 5.react-native-responsive-dimensions 6.react-native-simple-toast 开发依赖 1.eslint-config-equimper 2.flow-bin 3.react-native-debugger-open 4.eslint

React Native 运行环境安装:0.6以下/以上版本的 新老项目 都适用

用新环境运行老RN项目,或者换电脑运行RN项目,环境配置不对会引起项目无法执行,建议先重新安装环境,然后执行:因为RN项目的运行与本地环境,终端脚本执行顺序,模拟器版本等都有关系。 1.卸载Homebrew 并重新安装 1.1先卸载Homebrew /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/uninstall)" 1.2然后再安装 /usr...

ws1836300的博客 1180

STM32巡线小车PID调参实战:从五路灰度传感器数据到稳定运行的避坑指南

本文详细介绍了STM32巡线小车的PID调参实战,从五路灰度传感器数据处理到PID参数优化,提供了系统化的调试方法和常见问题解决方案。通过加权平均法计算偏移量,逐步调整比例、积分、微分参数,实现小车稳定巡线。文章还涵盖了定时器配置、控制周期优化及高级调试技巧,帮助开发者避开常见陷阱,提升巡线性能。

weixin_42570484的博客 191

保姆级图解:FD-SOI工艺流程中的关键三步(外延生长、应变硅、HKMG)

本文详细解析了FD-SOI工艺流程中的三大关键技术:外延生长、应变硅工程和HKMG集成。通过选择性外延生长技术优化接触电阻,利用应变硅提升载流子迁移率,并结合先栅高k金属栅工艺实现精准栅极控制,FD-SOI技术在智能手机处理器和自动驾驶芯片制造中展现出卓越的低功耗与高性能平衡。

weixin_29267307的博客 472

[快速上手RN] 0.React Native 快速启动项目

在你的手机上快速启动一个APP

iMingzhen的博客 4706

AI人工智能与模拟退火:碰撞出的智慧火花

本文旨在为读者全面介绍模拟退火算法在人工智能领域的应用。我们将涵盖从基础理论到实际实现的完整知识体系,帮助读者理解这一受自然界启发的优化技术如何解决复杂的计算问题。文章首先介绍模拟退火的基本概念,然后深入其工作原理和数学基础,接着通过Python实现展示具体应用,最后讨论实际应用场景和未来发展方向。模拟退火(Simulated Annealing, SA):一种受物理退火过程启发的概率性优化算法能量函数(Energy Function):评估系统状态的函数,对应优化问题的目标函数。

AGI×大数据,开启智能时代的认知跃迁;解码AGI,赋能数据驱动的智能革命。 449

React Native开发一 webstorm搭建React Native开发环境

转载于https://blog.csdn.net/qiyei2009/article/details/78820207 1 前言 最近打算真的开始学习一下跨平台APP开发,一直在关注RN,因此也打算真的开始学习下(其实是笔者的公司也开始有这种跨平台的需求了,笔者在一家传统公司)。最后开始打算从RN开始学起。废话不多说,开始搞起。 2 基于webstorm的RN环境搭建 本次开发采用的环境为wi...

飞翔的熊blabla 402

Cadence Sigrity PowerSI实战:从.brd到S参数提取的完整避坑指南

本文详细介绍了使用Cadence Sigrity PowerSI进行信号完整性分析的完整流程,从.brd文件预处理到S参数提取的关键技巧。通过实战案例和避坑指南,帮助工程师高效解决高速PCB设计中的信号质量问题,提升仿真精度和设计效率。

carrot的博客 691

VSCode 降低适用版本并且关闭自动更新

官方表示,提高了远程服务器构建工具链的最低要求,更新了对 glibc 的要求,需要最低2.28版本。最快的方法是把vs code的版本降到1.85(为什么是这个版本呢?打开VS Code的官方网站(https://code.visualstudio.com/)通过查看可以知道,具体的版本没有直接显示分类,他是根据发布日期来分类的同时和版本匹配。在网站的顶部导航栏中找到”Updates”按钮,点击进入下载页面。找了半天一直没发现,原来就在紧挨着的下面。远程主机不满足运行vs code服务器的先决条件。

Sunflower的博客 9560

android新闻项目、饮食助手、下拉刷新、自定义View进度条、ReactNative阅读器等源码...

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_33898876的博客 122

Win10更新后黑屏只剩鼠标?火绒误杀explorer.exe的5种自救方案(附详细步骤)

本文详细介绍了Win10更新后出现黑屏只剩鼠标的5种专业修复方案,重点解决火绒误杀explorer.exe的问题。从基础的任务管理器操作到安全模式下的系统修复,再到注册表编辑和系统还原,提供了全面的解决方案,帮助用户快速恢复系统正常运行。

weixin_29306571的博客 624

RN4020低功耗蓝牙模块详解:从选型到透传配置与避坑指南

低功耗蓝牙(BLE)技术正在取代传统蓝牙,成为物联网设备短距无线通信的主流选择。BLE协议栈将复杂的射频管理和连接控制封装在芯片或模块内部,开发者通过标准接口即可快速实现无线数据传输。以Microchip RN4020为代表的BLE透传模块,内置完整蓝牙协议栈,仅需通过UART发送ASCII指令就能完成广播、连接和GATT服务配置,大幅降低了嵌入式项目的无线开发门槛。在STM32等MCU上,开发者只需处理串口收发即可实现手机与设备间的双向通信,适合智能家居、传感器采集、低功耗仪表等场景。实际应用中,模块的选

weixin_30617695的博客 344

WiFi基本概念(六)(L-STF,L-LTF)

L-STF它由10个OFDM symbol(1,0,1,0,1,0,1,0,1,0)构成,每个symbol是0.8us,GI是0.2us,总计10us。Symbol的长度是正常长度的1/4,因此称为Short training field,主要用于快速进行信号检测,信号同步,自动增益控制,接收天线选择(Diversity Selection)。 由于symbol长度是正常的1/4,子载波的宽度是正常的4倍,能进行初略的信道估计,其使用了-24, -20, -16, -12, -8, -4, 4, 8, 1

reekyli的专栏 6853

3、Tone Mapping色调映射(Advanced High Dynamic Range Imaging )

3、Tone Mapping色调映射(Advanced High Dynamic Range Imaging) 如今,大多数可用的显示设备无法本地显示HDR内容。 入门级显示器的对比度仅为200:1。 尽管高端液晶电视具有更高的对比度,但平均对比度约为10,000:1,但通常每个色彩通道的离散度为8位,很少为10位。 这意味着色调限制为255。在过去的二十年中,研究人员花费了大量时间和精力来压缩HDR图像和视频的范围,以便可以在LDR显示器上更“自然”地看到数据。 图3.1 色调映射和真实场景之间.

ISP行业的忠实粉丝 1861

转载:ZYNQ+linux网口调试笔记(1)PS-GEM0

zynq gem驱动

Mr_Ding123的博客 3519

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

react-native ios打包 、设置图标 启动图片

在这里只记录xcode 打包操作,申请证书操作,之前已经记录过了。 https://www.cnblogs.com/hellovoidworld/p/4127576.html 参考了这篇文章,只是可能xocde版本不同吧,有些异同。可以根据实际情况做参考 在项目工程中找到 后缀.xcodeproj的文件,然后在目录中打开, 1.选择iOS Device --- 选择Gene...

weixin_30950237的博客 374

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

react-native 启动页android

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34292924的博客 161

react-native应用签名与打包apk(十五)

转载:将 React Native 应用签名打包成 APK 注明:本文的react-native签名方案基于mac os,在windows下,java命令与生成签名文件的命令是一致的可以通用,生成的.keystore文件可以自定义,生成apk的方式因人而异,这个主要视.json配置文件而定。 Android要求所有应用都有一个数字签名才会被允许安装在用户手机上,所以在把应用发布到类似Googl...

Museions的开心博客 2106

最新--2018下半年Android面试历程(转载)

2018下半年Android面试历程 转自: ___chenxk  https://blog.csdn.net/qq_18242391/article/details/83928738,如有侵权即删 个人看法:可以总结下他的面试经历以及涉及到的面试题 下面开始正文吧: 从今年下半年以来就开始在杭州准备简历找工作了,原因基本都懂的,没多少工资,投递简历的渠道是Boss,偶尔也在拉钩上投递,...

fly_Xiaoma的博客 278

React Native 开发技术周报第22期 - 重点神器 Storybook 和 Expo 推荐

尊重版权,未经授权不得转载出处:http://www.lcode.org 本周报来自江清清的技术专栏,欢迎微信关注公共号:codedev123.精彩技术文章第一时间推送! 说在前面的话:React Native开发技术周报,主要会涉及React Native最新资讯,React Native教程,技术开发文章,开源项目,工具,视频等等。今天是我们的第二十二期,同时各位朋友有优秀的有关R

大灰狼的小绵羊哥哥的博客 3124

android翻译应用、地图轨迹、视频广告、React Native知乎日报、网络请求框架等源码...

Android精选源码 android实现高德地图轨迹效果源码 使用React Native(Android和iOS)实现的 知乎日报效果源码 一款整合百度翻译api跟有道翻译api的翻译君 RxEasyHttp一款基于RxJava2+Retrofit2实现简单易用的网络请求框架 Re...

chuangzhi9350的博客 204

React-Native 之Android应用开发踩坑纪 (一)————windows环境下配置

欢迎转载,转载注明出处: 我不只是看客自从在公司中被老大安利了移动开发的未来 React-Native之后开始关注相关,想尝试相关app开发。正好毕业准备毕设,脑子一热就选择了RN来开发一款app……题目上交就不能改了,现在好后悔。。。但硬着头皮上吧 ,废话有点多,开系列博客记录下走过的坑和关于React-Native开发Android的相关信息; 因为React-Native是基于js语法,所

我不只是看客的博客 2522

最新iOS原生项目集成React-Native:集成记录

原先用原生写的项目,没办法将项目中所有的代码都换成RN,而且我也不认为全换成RN就是好的,所以准备先将项目中的一些页面改成RN开发。由于我们并没有使用Cocoapods,因为Cocoapods管理第三方依赖的时候会自动创建一些目录,不便整个团队的管理。本篇文章记录了在已经创建好的原生项目上集成react-native的过程。前提:电脑已经安装过React-Native相关环境。一、创建工程 我在桌...

weixin_34272308的博客 113
上一篇: 【转载记录】rn环境配置
下一篇: uniapp使用vuex
蔬菜_
博客等级 码龄7年 29粉丝 50原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值