native react 底层实现_GitHub - dongzhijiaren/ReactNativeIPC_Mechanisms: React Native基础入门及底层通信原理...

React Native基础入门及底层通信原理

基础知识和工作原理(RN和Native通信原理)

生命周期、常用控件、布局

常用导航和代码调试

1.1 传统APP几种主要的开发方法

1.2 React Native的简单介绍

React Native是facebook开源的一款跨平台UI开发框架,相对于其他的hybrid的框架,其所面向的工作环境已经跳出了浏览器环境。

能做到既拥有原生native的交互体验,又能够保持web的高效与灵活,因此发布起就引起了业内极大的关注,目前已经可支持iOS和andorid两套平台。

1.3 React Native的特点

React Native里面没有webview,运行性能会更好;

采用了类似css flexbox的布局理念完成页面布局;

扩展性更强,Native端提供的是基本控件,JS可以自由组合使用;

支持直接热更新和远程调试;

能与原生控件进行交互,运行更流畅;

尊重平台特性,不强求一份原生代码支持多个平台

1.4 React Native的环境部署和项目运行

1.5 React Native的开发模式,如下图所示:

1.6 React Native的通信机制,如下图所示:

1.7 原理详解(以OC为例):

核心:原生端和JS端都保存了一份模块配置表,里面标记了所有原生暴露的模块和方法。

伪代码举例:

JS调用原生模块方法时,通过模块配置表把请求分解为模块ID、方法ID和参数传给原生,原生通过模块配置表找到对应的方法并执行。

React Native启动流程

具体流程

1,创建RCTBridge

桥接对象,管理JS和OC交互,它内部持有一个RCTBatchBridge对象

2,创建RCTBatchBridge

JS和OC交互主要是由它实现的

3,执行[RCTBatchedBridge loadSource]

加载JS源码

4,执行[RCTBatchedBridge initModulesWithDispatchGroup]

创建模块配置表

5,执行[RCTJSCExecutor injectJSONText]

往js中注入模块配置表

6,执行完JS代码,回调OC,调用OC中的组件

2.1 组件的生命周期

2.2 props和state来管理组件的状态

我们使用两种数据来控制一个组件:props和state。props是在父组件中指定,而且一经指定,在被指定的组件的生命周期中则不再改变。

对于需要改变的数据,我们需要使用state。

props和state区分:

props和state都是用于描述组件的特性,this.props标识那些本组件无法改变的特性,而this.state是会随着用户互动而产生变化的特性。

用props和state完成以下例子:

class Greeting extends Component{

render(){

return (

Hello {this.props.username}

);

}

}

// 1,props和state的使用

class PP1 extends Component{

constructor(props){

super(props);

this.state = {

name:"",

}

}

render(){

return (

props的使用

{'\n \n \n'}

state的使用

onChangeText={(text) => this.setState({name:text})} />

{this.state.name}

Welcome to React Native!

);

}

}

export default class App extends Component {

render() {

return (

);

}

}

const styles = StyleSheet.create({

container: {

flex: 1,

justifyContent: 'center',

alignItems: 'center',

backgroundColor: '#F5FCFF',

flexDirection: 'row'

},

flexboxStyles: {

flexDirection:'row',

flex:1,

backgroundColor:'#f5fcff',

paddingTop:200,

justifyContent:'space-around',

// alignItems:'stretch'

}

});

2.3 Flexbox布局

我们在React Native中使用Flexbox规则来指定某个组件的子元素的布局。Flexbox可以在不同屏幕尺寸上提供一致的布局结构。

一般来说,使用flexDirection(主轴和次轴)、alignItems和 justifyContent三个样式属性就已经能满足大多数布局需求。

2.4 Flexbox布局主要参数

Flex Direction

在组件的style中指定flexDirection可以决定布局的主轴。子元素是应该沿着水平轴(row)方向排列,还是沿着竖直轴(column)方向排列呢?默认值是竖直轴(column)方向。

Justify Content

在组件的 style 中指定justifyContent可以决定其子元素沿着主轴的排列方式。子元素是应该靠近主轴的起始端还是末尾段分布呢?亦或应该均匀分布?对应的这些可选项有:flex-start、center、flex-end、space-around、space-between以及space-evenly。

Align Items

在组件的 style 中指定alignItems可以决定其子元素沿着次轴(与主轴垂直的轴,比如若主轴方向为row,则次轴方向为column)的排列方式

具体实现如下:

// 3,Flexbox布局

class PP3 extends Component{

render(){

return (

);

}

}

export default class App extends Component {

render() {

return (

);

}

}

const styles = StyleSheet.create({

container: {

flex: 1,

justifyContent: 'center',

alignItems: 'center',

backgroundColor: '#F5FCFF',

flexDirection: 'row'

},

flexboxStyles: {

flexDirection:'row',

flex:1,

backgroundColor:'#f5fcff',

paddingTop:200,

justifyContent:'space-around',

// alignItems:'stretch'

}

});

3.1 React Native的常用导航器:react-navigation

react-navigation的出现替代了Navigator、Ex-Navigation等老一代的导航组件,react-navigation可以说是Navigator的加强版,不仅有Navigator的全部功能,另外还支持底部导航类似于与iOS中的UITabBarController,此外它也支持侧拉效果方式的导航类似于Android中的抽屉效果。

3.2 React Native安装和导入开源框架:

安装: npm install --save react-navigation 或者 yarn add react-navigation

导入: import {StackNavigator} from 'react-navigation'

3.3 代码调试

1,Developer Menu(模拟器和真机)

Android模拟器:可以通过Command⌘ + M 快捷键来快速打开Developer

Menu。也可以通过模拟器上的菜单键来打开。

iOS模拟器:可以通过Command⌘ + D快捷键来快速打开Developer Menu。

真机:可以通过摇动手机来开启Developer Menu。

2,Chrome Developer Tools

Element 面板: 用于查看和编辑当前页面中的 HTML 和 CSS 元素。

Network 面板:用于查看 HTTP 请求的详细信息,如请求头、响应头及返回内容等。

Source 面板:用于查看和调试当前页面所加载的脚本的源文件。

TimeLine 面板: 用于查看脚本的执行时间、页面元素渲染时间等信息。

Profiles 面板:用于查看 CPU 执行时间与内存占用等信息。

Resource 面板:用于查看当前页面所请求的资源文件,如 HTML,CSS 样式文件等。

Audits 面板:用于优化前端页面,加速网页加载速度等。

Console 面板:用于显示脚本中所输出的调试信息,或运行测试脚本等。

3.4 调试工具

3.5 React Native和Flutter比较

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值