首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

React Native vs. Cordova、PhoneGap、Ionic,等等

本文首发于知乎,各位可以通过点击文章下方的阅读原来来访问原文地址 ? 在前面的文章中,我曾说过 React Native 很棒,因为它能让我们使用原生 UI 来开发应用。...React Native 相比于其他移动端框架 (比如 PhoneGap、Cordova 和 Ionic) 又如何呢? 现在我们来深入这些问题。坐稳了!...什么是 WebView UI ? 更原生化的框架的优势和劣势分别是什么?原生化更少的框架呢? React Native 与 Cordova 相比如何? 到底什么才是“原生”应用?...React Native 要比 WebView UI 原生得多 像 Cordova 这样的框架可以使用 Web 技术来开发移动 UI 。它们是如何做到的呢?...它们在每个应用中都内嵌了 Web 浏览器,并美名其曰 WebView!你在 UI 中看到的所有,包括按钮、菜单和动画,都是在浏览器的网页中运行的。

3.2K40
您找到你想要的搜索结果了吗?
是的
没有找到

干货|携程Web组件在跨端场景的实践

二、方案介绍 那么如何做到“一套 Web 代码,多端共享”—— 我们的小程序使用 Taro 框架和 React 框架进行开发,Taro 支持渲染 HTML 标签,鉴于此,我们选择了 React 作为 Web...因此我们要思考三个核心问题是:如何识别不同宿主环境,如何使用宿主环境的能力以及如何与宿主环境通信。...分享则有一些特殊,微信小程序规定,唤起分享有两个条件: 条件一:通过给 button 组件设置属性`open-type=share`; 条件二:在用户点击按钮后触发`Page.onShareAppMessage...} from 'react-native'; import { WebViewModal } from 'react-native-webview'; export default class Demo...后续我们持续关注,丰富的 Web 组件表现形式是否有效提高了用户的点击率以及 Web 组件在各端的性能表现。 最后,让我们看下 Web 组件的效果: Native 端: 小程序端:

23120

如何React Native 实现类微信小程序平台:WebView 调用原生组件

在《我们是如何 Cordova 应用嵌入到 React Native 中》 一文中,我们简单地介绍了『React Native 重写 Cordova 插件:复杂插件的调用』步骤: WebView 调用...RN 方法,并监听 React Native 返回的相应事件 React Native 接收到 WebView 的调用,调用原生代码,并监听原生代码返回的相应事件 原生代码执行 React Native...步骤1:WebView 调用 RN 方法,并监听 React Native 返回的相应事件 这里,我们和《React Native + Cordova WebView 演进:Plugin 篇》中一样,仍然以...Native 发过来的内容,当接收到内容数据以广播的形式发出。...Native 调用的方法,并响应事件给 React Native 如上,由于 iOS 的日期插件是异步的,并且它只能通过方法,而非组件的方式来唤醒 UI,故而需要 sendEventWithName

3.5K100

解剖小程序的 setData

而关于数据更新的解决方案,React 首先提出了虚拟 DOM 的设计,而现在也基本被大部分框架吸收,小程序也不例外。...逻辑层和渲染层的通信会经由微信客户端(Native)做中转,逻辑层发送网络请求也经由 Native 转发 ,小程序的通信模型如图: [小程序的通信模型图(官方)] 当前,视图层和逻辑层的数据传输,实际上通过两边提供的...而 evaluateJavascript 的执行会受很多方面的影响,数据到达视图层并不是实时的。所以我们的setData函数数据从逻辑层发送到视图层,是异步的。...不用问就是setData了: this.setData({ key: value }) setData函数用于数据从逻辑层发送到视图层(异步),同时改变对应的this.data的值(同步)。...频繁交互的性能 我们知道,用户的一次交互,如点击某个按钮,开发者的逻辑层要处理一些事情,然后再通过 setData 引起界面变化。

4.5K41

跨平台技术演进

进程 View & App Service通信 视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层触发的事件通知到逻辑层进行业务处理。...优缺点分析 优点 预加载WebView,准备新页面渲染 View层和逻辑层分离,通过数据驱动,不直接操作DOM 使用Virtual DOM,进行局部更新 组件化开发 缺点 仍使用WebView渲染,并非原生渲染...Virtual DOM在内存中,可以通过不同的渲染引擎生成不同平台下的UI,JS和Native之间通过Bridge通信 React Native 工作原理 ?...在 React 框架中,JSX 源码通过 React 框架最终渲染到了浏览器的真实 DOM 中,而在 React Native 框架中,JSX 源码通过 React Native 框架编译后,与Native...渲染和布局更高效:React Native摆脱了WebView的交互和性能问题,同时可以直接套用网页开发中的css布局机制。

2.4K20

React-Native WebView,实现RN代码与Html的简单交互

React-Native WebView API 属性介绍 webview 实现与RN代码简单交互 在Android原生代码中对ReactNative WebView控件进行初始设置 React-Native...WebView 首先结合React-Native 高版本与低版本(0.41.2 与 0.25.1)分析其RN源码(偏向于Android方向)及api WebView WebView 作为一个RN组件也是有其生命周期方法...综合上面信息,可知该属性为设置浏览器标识,也可通过原生接口WebViewConfig实现定制WebView,下面会稍作详细介绍如何使用WebViewConfig。...参看:https://github.com/alinz/react-native-webview-bridge 实现起来,稍微复杂些,安卓IOS端都需引入依赖。...由于MainReactPackage.java里已经ReactWebViewManager进行无参实例化,并加入集合通过createViewManagers()返回。

2.8K10

React Native——一次学习,随处编写

React Native开发的界面上有让用户输入用户名与密码的UI控件,还有一个登录按钮。...在服务器回应后,原生代码再将收到的回应中的登录成功与否,以及其他一些需要UI展示的数据传递给React Native组件,React Native组件接收原生代码传来的数据,解析这些数据并执行UI界面更新...原来使用原生代码实现的UI小部件包装成React Native的自定义组件 Widget在移动应用程序开发中被广泛使用,它们有官方发布的,也有第三方开源的,还有开发者自行开发的。...React Native支持这些Widget包装成React Native的自定义组件,然后就可以在ReactNative代码中方便地使用了。...React Native不排斥WebView开发,并且为WebView提供了相应的组件,可以在ReactNative中实现部分界面通过WebView呈现。

1.6K20

关于移动互联网的跨平台技术演进

进程 View & App Service通信 视图层和逻辑层通过系统层的JSBridage进行通信,逻辑层把数据变化通知到视图层,触发视图层页面更新,视图层触发的事件通知到逻辑层进行业务处理。...优缺点分析 优点 预加载WebView,准备新页面渲染 View层和逻辑层分离,通过数据驱动,不直接操作DOM 使用Virtual DOM,进行局部更新 组件化开发 缺点 仍使用WebView渲染,并非原生渲染...Virtual DOM在内存中,可以通过不同的渲染引擎生成不同平台下的UI,JS和Native之间通过Bridge通信 React Native 工作原理 在 React 框架中,JSX 源码通过 React...框架最终渲染到了浏览器的真实 DOM 中,而在 React Native 框架中,JSX 源码通过 React Native 框架编译后,与Native原生的UI组件进行映射,用原生代替DOM元素来渲染...渲染和布局更高效:React Native摆脱了WebView的交互和性能问题,同时可以直接套用网页开发中的css布局机制。

1.7K30

【干货】解剖小程序的 setData

模板数据绑定 模版数据绑定的方案,已经成为前端框架中最基础的功能。 数据绑定的过程其实不复杂: 1.解析语法生成 AST。 2.根据 AST 结果生成 DOM。 3.数据绑定更新至模板。...而关于数据更新的解决方案,React 首先提出了虚拟 DOM 的设计,而现在也基本被大部分框架吸收,小程序也不例外。...而 evaluateJavascript 的执行会受很多方面的影响,数据到达视图层并不是实时的。所以我们的setData函数数据从逻辑层发送到视图层,是异步的。...不用问就是setData了: 123 this.setData({key: value}) setData函数用于数据从逻辑层发送到视图层(异步),同时改变对应的this.data的值(同步)。...频繁交互的性能 我们知道,用户的一次交互,如点击某个按钮,开发者的逻辑层要处理一些事情,然后再通过 setData 引起界面变化。

1.6K30

大前端开发中的路由管理之三:Android篇

在混合开发页面中,通常又分为Activity-H5(WebView),Activity-Weex/React-Native,和Activity-Flutter这几种跨平台的页面交互方式。...隐式调用通过Intent Filter来实现,Android系统会根据在隐式意图中设置的动作(action)、类别(category)、Data(URI和数据类型)找到合适的组件来处理这个意图。...通过显式/隐式调用Intent实现跳转到native页面,WebView本身可以通过常见的工具类如WebSettings、WebViewClient、WebChromeClient实现配置、加载与请求处理...        Weex和React-Native经过中间层转化为原生控件来渲染UI界面(通过一套规则,映射到原生控件)。...,分别梳理了native-H5(WebView)、native-Weex/React-Nativenative-Flutter这几种常见的跨平台的页面交互方式,使得在更加复杂的页面管理下仍可万变不离其宗

3.2K11

微信小程序基础架构浅析

其中渲染层提供了带有数据绑定语法的 WXML,逻辑层提供了setData 等等 API,开发者需要进行界面变化时,只需要通过在逻辑层执行 setData 把变化的数据通过 Native 层传递到渲染层,...逻辑层待传输数据转换成字符串,并拼接到特定的 JS 脚本,最后数据传输到渲染层。...在赋予 H5 原生 API 能力的基础上,进一步通过 JSBridge JS 解析成虚拟 DOM 传递到 Native,并使用原生渲染。...当有变更,通过 diff 算法生成差异对象 最终由 Native差异对象应用到原生 App 的页面元素上。...由于setData中的数据不仅需要通过 Native 层传递到渲染层,通过 DOM diff 算法等渲染成最终页面,所以需要尽量减少setData的使用以避免性能问题。

2.7K20

跨平台解决方案的技术分析

那么,行业龙头型 APP 如何持续拓展服务边界,快速响应市场需求变化以保持竞争优势,后进的 APP 如何通过产品、商业模式创新,迅速切入市场,提高研发的灵活机动性同时不降低产品的用户体验。...下面以 React Native 为例,具体展开讲解一下原生渲染方案,React Native 的整体架构图如下: React 层 最顶层是 React 层,利用 React 框架进行 UI 的数据描述...Diff 对比和消息收发等 [JS Bundle 中间产物] React Native 通过 metro 打包功能直接整个 RN 应用打包为一个 JSBundle,通过 Bridge 层在 RN 应用初始化时加载整个...UI 线程中,Native 通过调用 C++ 的各自实现,绘制指令通过 window 对象发送给 Dart 层,Dart 层会重构代表 UI 的数据树(Widget Tree,Element Tree...Skia 这一跨平台渲染引擎进行光栅化,绘制成帧数据数据放在帧缓冲区,然后等待显示器上屏。

1.1K20

跨平台解决方案的技术分析

那么,行业龙头型 APP 如何持续拓展服务边界,快速响应市场需求变化以保持竞争优势,后进的 APP 如何通过产品、商业模式创新,迅速切入市场,提高研发的灵活机动性同时不降低产品的用户体验。...下面以 React Native 为例,具体展开讲解一下原生渲染方案,React Native 的整体架构图如下: React 层 最顶层是 React 层,利用 React 框架进行 UI 的数据描述...Diff 对比和消息收发等 [JS Bundle 中间产物] React Native 通过 metro 打包功能直接整个 RN 应用打包为一个 JSBundle,通过 Bridge 层在 RN 应用初始化时加载整个...UI 线程中,Native 通过调用 C++ 的各自实现,绘制指令通过 window 对象发送给 Dart 层,Dart 层会重构代表 UI 的数据树(Widget Tree,Element Tree...Skia 这一跨平台渲染引擎进行光栅化,绘制成帧数据数据放在帧缓冲区,然后等待显示器上屏。

1.3K20

React Native 图表组件Echarts

一种在 React Native 中封装的响应式 Echarts 组件,使用与示例请参见:react-native-echarts-demo 近年来,随着移动端对数据可视化的要求越来越高,类似...前端领域数据可视化的发展相对繁荣一些,通过 WebView 在移动端使用 Echarts 这样功能强大的前端数据可视化库,是解决问题的好办法。...Native 组件的事件通信 通过组件的 exScript 参数,可为 WebView 添加任意脚本,使用灵活 由于是自己写的组件, echarts 版本、扩展包,svg/canvas 、数据增量加载都可以自己设定...Demo 与使用方法 使用与示例请参见:react-native-echarts-demo,如果你需要直接使用,可按以下步骤移植: 根目录下的 WebChart 组件文件夹拷到你项目中合适的地方 ...Echarts与React Native组件的通信 在 React NativeWebView 组件中,提供了 onMessage 和 postMessage 来进行 html 与组件的双向通信,

2.5K20
领券