当React开发者初次走进React-Native的世界

RN千机变

1.技术体系问题css

RN和React共用一套抽象层,相对于前端,RN其实更接近Node的运行环境html

ReactNative =React +IOS +Android

看RN文档时,我会发现入门基础那一块介绍的都是React的内容,进阶篇则介绍了不少IOS和Android的API前端

2.组件设计问题react

Android和IOS一些设计组件是不共通的,这意味着,本来在React上只返回一个组件的状况下,RN中你可能须要判断平台分别返回两个版本的组件,为何要这样? 由于对于许多组件,两个平台的风格差别实在太大,只能分而治之。android

3.静态资源问题ios

RN应用和普通Web应用有一些天生的差异,RN应用是能够植入预约的静态资源的,也就是不须要通过任何一次请求,而均可以本地使用的静态资源,而Web应用试图使用这种资源则须要通过至少一次的网络请求而且缓存,但仍有可能被用户强清缓存等操做付之一炬。web

这意味着,作性能优化时也许能够从静态资源入手了,我阅读了如下文章后 探索 react native 首屏渲染最佳实践数据库

学习到了能够经过静态文件占位图优化RN首屏的新思路。固然,不少时候React和RN的优化思路也是共通的,例如react-native

  • 资源预先缓存
  • 长列表延迟加载等等

4.标签生效问题浏览器

  • <div>不能用啦,要用<view>
  • <p>标签用不了啦,要用<Text>
  • 没有<img>了,取而代之的是<Image>
  • 背景,能够用ImageBackground这个组件
  • 列表,不能用ul/li啦,用ListView组件吧兄弟
  • 各类Input,不能用input标签啦~ 要用对应的原生控件,好比TextInput、Picker、Switch、Slider

5.事件核心问题

Web开发中,点击事件是核心,而在主攻移动端的RN中,触摸事件的地位则大大加强,并且除此以外,还衍生了长按事件(JS中我记得只有双击事件没有长按事件)

  • onPressOut等等
  • onLongPress 等等

6.CSS3属性受限,动画效果使用方式彻底变动

CSS/Animation我用不了了,由于CSS已经没了了,底层是用bridge调原生的UI构建

7.虚拟DOM到虚拟View的演变

在React中,咱们使用虚拟DOM模拟现实中的DOM节点

在RN中,这个对象被换成了虚拟View,对应原平生台中的视图,由于RN中已经没有DOM了

8.UI呈现的变化

(如下参考自: http://blog.ilibrary.me/2016/12/25/react-native-internal)

UI的描述和呈现分离开了。

  1. html文本描述了页面应该有哪些功能,css告诉浏览器该长什么样。
  2. 浏览器引擎经过解析html和css,翻译成一些列的预约义UI控件,
  3. 而后UI控件去调用操做系统绘图指令去绘制图像展示给用户。
  4. Javascript无关紧要,主要用于html里面一些用户事件响应,DOM操做、异步网络请求和一些简单的计算。
在react native 里面,1和2是不变的,也是用html语言描述页面有哪些功能,而后stylesheet告诉浏览器引擎每一个控件应该长什么样。而且和浏览器用的是同一个引擎。
在步骤3里面UI控件再也不是浏览器内置的控件,而是react native本身实现的一套UI控件(两套,android一套,ios一套),这个切换是在MessageQueque中进行的,而且还能够发现,他们tag也是不同的。参考连接:http://blog.ilibrary.me/2016/12/25/react-native-internal

 

RN大观园

  1. IOS9只支持https,以http加载网络图片资源是无效的
  2. React-native内置babel转换器和ES6的polypill
  3. RN使用的引擎是safari的引擎而咱们通常调试的时候用的是Chrome的V8引擎
  4. 遇到频繁修改属性的场景,为了不影响性能,建议使用setNativeProp直接修改属性,而不是走setState的流程
  5. 测试元素和包裹容器的距离,在普通场景中咱们可能会考虑scrolltop,offsetTop等一堆属性,在RN中能够经过一个方法,叫measure和measureLayOut,能分别测以某个元素为参考点的相对位置和绝对位置
  6. RN相对于普通web应用,增长了一个属性叫hsl,能够指定:色度-饱和度-亮度,是否是感受和rgba很相似的做用呀
  7. 若是访问的一些API,可是RN平台暂时没有作封装,就须要本身用Object-C或者Android实现
  8. 数据库: RN是移动端应用,那不就意味着能够用Android等的数据库或者文件系统了吗? 在RN中这彷佛被封装成了AsyncStroage,若是以为API还不能知足的话,能够用社区里的一个高性能的RN库——realm
  9. 后台任务能够很方便的用了,就像web-worker同样
  10. 编写跨平台代码时候,RN专门提供了Platform对
  11. Plaform.OS: 返回平台名称,好比iOS或者android
  • Plaform.Version: 返回版本
  • Plaform.select: 方法,接收一个对象,能够分别指定ios和android环境下的返回值,酌情返回

     12.导航有提供专门的模块:好比react-navigation和react-native-navigation

     13.动画要用Animated控件,不能本身写CSS3的动画属性了,好比Animation和transition

相关文章
相关标签/搜索