《React Native跨平台移动应用开发》读后鬼扯
- 别名:手把手教你学React Native
- 评分:3星
- 作者:阙喜涛
- GitHub:https://github.com/es6rn (本书相关代码主页,非作者本人的)
- 豆瓣:https://book.douban.com/subject/26809232/
这本书和别名写的一样,手把手教你学RN,和很多入门的书籍很相似,按照本书的章节一步一步来,肯定对RN的开发会有一定的了解。但是它也一本某些内容注定会落伍的书,因为RN还在不断的更新中,不排除会有破坏性的更新导致某些章节内容在RN最新版下是错误的,这个都是废话。
现实中,Android和iOS两大移动操作系统分庭抗礼的局面决定了注定会有类似RN这样跨平台移动开发框架的出现,只不过各家实现的思路不同而已,以ionic,RN,Flutter为代表分别扯一下。
ionic算是我的老冤家了,用它做过项目,我还写了一个入门教程 ionic3-handbook,ionic是基于Angular和Cordova的,它的原理也很简单,Angular开发打包的js代码运行在WebView中,通过Cordova插件与Native进行交互,调用原生功能。Cordova的简化版可以看是大头鬼的开源的项目JsBridge,原理一样,但是前者提供了插件的能力。下图展示了ionic应用内部运行原理。
除了少部分需要分别针对Android和iOS的适配外,真的是做到了Write once,Run anywhere。有Angular开发经验的人很容易上手,写一个简单的APP贼快。 缺点也很明显,性能,还是性能。因为使用了WebView,占用内存高,性能差。iOS上很流畅,但是在Android中低端机上效果还是差了点。
RN技术抛开了WebView,利用JavaScriptCore来做桥接,将js调用转为native调用。说的再明白一些,RN会把写的代码打包成一个js文件,RN这个框架会解释这个文件,事件的话就通过Bridge调用原生的事件,UI的话就通过Bridge传递参数给Native,然后Native渲染出对应的原生组件。具体原理见下图:
RN相比ionic的性能要好很多,但是它只能做到Learn once,Write anywhere,学习一套语法和工具,可以开发两个平台上的代码。RN还有一个好处就是热更新,这个对iOS开发者来说是好事。RN的缺点也很明显,适配代码可能需要维护两套,当没有开源的组件时,自己实现起来花时间不说,还需要写原生的开发人员的配合。
Flutter是谷歌推出的跨平台开发的框架,它既没有采用WebView也没有采用JavaScriptCore,而是自己实现了一个UI框架,底层从 RN 这样桥接原生 UI 组件的方案换成了基于 OpenGL / Vulkan 这样的图形库,直接在系统更底层渲染系统上画UI。这个完全脱离了原生的组件,对一些效果有很好的控制。原理图如下:
学过Android,ionic,RN后,对如何入门一个移动端开发技术有些心得,个人觉得步骤如下:
- 环境配置
- 新建项目和调试工具
- 入口文件
- 数据和事件绑定
- 布局和样式
- 界面跳转
- 生命周期
- 网络请求
- 数据存储
- 权限设置
- 主题风格
- 事件广播
- 适配
- 打包
其他的都是些组件使用等细节或者是更高级的用法了。
再扯回来,所有的组件中我觉得最需要花心思的就是List类组件了,两个原因,一个是大量数据下如何维持性能,保持顺滑,另一个提供拓展能力满足各种设计。我们现在常用的软件,很多都是信息流的,必然要用到List。RN先是提供了ListView,后来升级为FlatList,是明智之举。可以这么说,没有高性能可拓展List组件的框架不是好框架。
以前没写过React代码,第一次接触RN写界面的时候都懵了,居然还可以这样,JSX还真是个有意思的东西。RN中我觉得一个亮点就是实现了flex布局,这个真心是好用啊,让我想起类当年写Android布局的痛苦岁月,谷歌不整这么一套真的说不过去。
RN中的状态机思维让我一度陷入拆分组件的痛苦中,在写代码高仿知乎我的
这一界面时,拆的我都有点儿崩溃,时时刻刻想把大的组件拆分成小的只负责渲染数据的无状态RN组件。用了React-Redux后,我觉它和RN真的是天作之合啊,还专门花了时间弄清楚他的原理,具体见一幅图明白React-Redux型原理,搞明白之后才发现,真的是框架处处皆发布订阅模式。
这本书不推荐购买,初学者图书馆借一本,照着里面代码写一遍,RN基本上就是入门了。具体项目遇到什么坑,Google一下还是很容易就解决的。
本文来源: 掘金 如需转载请联系原作者
低调大师中文资讯倾力打造互联网数据资讯、行业资源、电子商务、移动互联网、网络营销平台。
持续更新报道IT业界、互联网、市场资讯、驱动更新,是最及时权威的产业资讯及硬件资讯报道平台。
转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。
- 上一篇
谷歌面临欧洲监管机构创纪录罚款
据“华尔街日报”周二报道,谷歌正面临欧盟委员会数十亿欧元的罚款。这次罚款的原因是谷歌涉嫌迫使智能手机厂商捆绑其应用程序。 据该报报道,欧洲数字市场监管机构一直在调查互联网巨头在手机操作系统市场上滥用主导地位的行为。 华尔街日报有关消息人士称,他们预计欧盟的反托拉斯监管机构会抨击谷歌的移动商业行为。不仅仅是罚款,还要求谷歌取消鼓励应用程序捆绑到Android手机上的策略。欧盟委员会可能会得出这样的结论,即作为Alphabet的子公司,谷歌正在扼杀竞争对手以保护移动设备的广告收入。 由于Android拥有欧洲近四分之三的移动市场,欧盟委员会对谷歌鼓励智能手机制造商在其设备上安装谷歌搜索及其Chrome浏览器的做法表示担心。而且谷歌还会向这些手机制造商支付预安装谷歌应用的费用。 与此同时,华盛顿邮报报道称,谷歌可能不会取消与使用Android的智能手机厂商的应用捆绑交易。在Android智能手机上提供Google Chrome等搜索工具,Google可以通过植入广告和收集移动用户的数据并从中获利。 谷歌的贸易组织计算机与通信行业协会负责竞争和欧盟监管政策的副总裁Jakob Kucharczy...
- 下一篇
react native 实现图片预览 图片保存 react-native-image-zoom-viewer
图片 预览,和保存 功能 应该是很常见的APP 功能 。实现起来也很简单。 这里用到的组件是:https://github.com/ascoders/react-native-image-viewer 看下新效果图: [图片上传中...(IMG_2267.PNG-88e1c2-1531416206166-0)] IMG_2267.PNG IMG_2268.PNG 使用 : npm i react-native-image-zoom-viewer --save 下面代码 自己稍加修改 ,拿过去就能用 import React, { Component, PropTypes } from 'react'; import { View, Text, TouchableHighlight, StyleSheet, ScrollView, ListView, Image, Modal, TouchableOpacity, Dimensions, ActivityIndicator, CameraRoll, } from 'react-native'; import ImageViewer fro...
相关文章
文章评论
共有0条评论来说两句吧...
文章二维码
点击排行
推荐阅读
最新文章
- CentOS关闭SELinux安全模块
- CentOS7编译安装Gcc9.2.0,解决mysql等软件编译问题
- Windows10,CentOS7,CentOS8安装MongoDB4.0.16
- Hadoop3单机部署,实现最简伪集群
- SpringBoot2编写第一个Controller,响应你的http请求并返回结果
- CentOS6,CentOS7官方镜像安装Oracle11G
- Eclipse初始化配置,告别卡顿、闪退、编译时间过长
- SpringBoot2全家桶,快速入门学习开发网站教程
- CentOS8编译安装MySQL8.0.19
- CentOS6,7,8上安装Nginx,支持https2.0的开启