RN千机变

1.技术体系问题

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

ReactNative =React +IOS +Android

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

2.组件设计问题

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

3.静态资源问题

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

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

学习到了可以通过静态文件占位图优化RN首屏的新思路。当然,很多时候React和RN的优化思路也是共通的,例如

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

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

当React开发者初次走进React-Native的世界的更多相关文章

  1. 走进React

    走进React React是一个构建用户界面的JavaScript库,是Facebook公司在2013年5月在github上开源的.其特点如下: 高效--React通过对DOM的模拟,最大程度地减少和 ...

  2. 用 React 编写移动应用 React Native

    转载:用 React 编写移动应用 React Native ReactNative 可以基于目前大热的开源JavaScript库React.js来开发iOS和Android原生App.而且React ...

  3. 京东云开发者|关于“React 和 Vue 该用哪个”我真的栓Q

    一.前言:我全都要 面对当今前端界两座大山一样的主流框架,React和Vue,相信很多小伙伴都或多或少都产生过这样疑问,而这样的问题也往往很让人头疼和犹豫不决: 业务场景中是不是团队用什么我就用什么? ...

  4. 1. React介绍 React开发环境搭建 React第一个程序

    什么是 React         React 是 Facebook 发布的 JavaScript 库,以其高性能和独特的设计理念受到了广泛关注. React的开发背景         Faceboo ...

  5. 【react学习】关于react框架使用的一些细节要点的思考

    ( _(:3 」∠)_给园友们提个建议,无论是API文档还是书籍,一定要多看几遍!特别是隔一段时间后,会有意想不到的收获的)   这篇文章主要是写关于学习react中的一些自己的思考:   1.set ...

  6. [React] 02 - Intro: why react and its design pattern

    为啥使用React,给我个理由 过去 需要手动更新DOM.费力地记录每一个状态:既不具备扩展性,又很难加入新的功能,就算可以,也是有着冒着很大的风险. 不过,使用这种开发方式很难打造出极佳的用户体验. ...

  7. 转载 React.createClass 对决 extends React.Component

    先给出结论,这其实是殊途同归的两种方式.过去我们一般都会使用 React.createClass 方法来创建组件,但基于 ES6 的小小语法糖,我们还可以通过 extends React.Compon ...

  8. 【React 资料备份】React Hook

    Hooks是React16.8一个新增项,是我们可以不用创建class组件就能使用状态和其他React特性 准备工作 升级react.react-dom npm i react react-dom - ...

  9. [转] React 最佳实践——那些 React 没告诉你但很重要的事

    前言:对很多 react 新手来说,网上能找到的资源大都是些简单的 tutorial ,它们能教会你如何使用 react ,但并不会告诉你怎么在实际项目中优雅的组织和编写 react 代码.用谷歌搜中 ...

随机推荐

  1. Oracle 存储过程批量插入数据

    oracle 存储过程批量插入大量数据 declare numCount number; userName varchar2(512); email varchar2(512); markCommen ...

  2. Mybatis获取代理对象

    mybatis-config.xml里标签可以放置多个environment,这里可以切换test和develop数据源 databaseIdProvider提供多种数据库,在xml映射文件里选择da ...

  3. JVM系列(2)- jmap+mat实战内存溢出

    熟悉几个监控JVM的常用命令 1. jps -l 查出当前服务器运行的java进程 --- 2. jinfo用法(结合jps -l查到进程ID) 1).查看最大堆内存:jinfo -flag MaxH ...

  4. 12、面向对象的思想(OOP)

    面向对象与面向过程 1.都是解决问题的思维方式,都是代码的组织的方式: 2.解决简单的问题可以使用面向过程: 3.解决复杂的问题建议使用面向对象,微观处理依旧会使用面向过程. 对象的进化史(数据管理的 ...

  5. 手写Struts,带你深入源码中心解析

    个人剖析,不喜勿喷 扫码关注公众号,不定期更新干活 在此申明本博文并非原创,原文:http://blog.csdn.net/lenotang/article/details/3336623,本文章是在 ...

  6. centos7 yum搭建lnmp环境及配置wordpress超详细教程

    yum安装lnmp环境是最方便,最快捷的一种方法.源码编译安装需要花费大量的人类时间,当然源码编译可以个性化配置一些其它功能.目前来说,yum安装基本满足我们搭建web服务器的需求. 本文是我根据近期 ...

  7. Mysql优化(出自官方文档) - 第八篇(索引优化系列)

    目录 Mysql优化(出自官方文档) - 第八篇(索引优化系列) Optimization and Indexes 1 Foreign Key Optimization 2 Column Indexe ...

  8. iOS 11 变化

    首先我是开发者,更关心对技术的影响,我又需要关注.学习哪些技术,猫神的文章:http://www.cocoachina.com/ios/20170607/19457.html 介绍了 ******** ...

  9. zookeeper的leader选举机制个人总结

    第一步:每个服务器都首先投自己,格式为<sid,zxid>: 第二步:然后将自己的投票以<sid,zxid>形式发送给其他服务器,这样每个服务器除了自己的投票,还有集群中除了自 ...

  10. 【转】[Python小记] 通俗的理解闭包 闭包能帮我们做什么?

    https://blog.csdn.net/sc_lilei/article/details/80464645