React Native和Typescript的项目开发入门

React Native

React是前端三大框架之一,React Native是它在两大客户端平台(IOS和Android)上的实现,react-dom则是浏览器(包括服务端渲染)上的实现,所以说React Native的地位与react-dom对应,依赖于React,他们间有版本依赖关系。

样式布局

React Native由于客户端的实现,样式的写法也有所不同。正常样式的写法没法对RN有效,官方利用Flexbox(弹性盒子)语法通过yoga实现了对页面进行布局,区别在于默认是纵向,并非横向。细节以下:

  • 主要分为ViewStyle和TextStyle两类,不能交叉使用
  • Images必须定高宽
  • 样式不能实现继承,只有text嵌套能继承样式,但是这种情景不多
  • 高宽采用数字,默认单位为dp,会导致ios和安卓不统一的情况

样式适配

移动端的样式问题一直是非常关键的问题,移动端H5页面是通过rem(或者vw)来进行适配的。RN由于默认是以dp为单位,乘以dpr才得到实际像素。举个栗子,有两台手机,分别是iphone 7(宽度 3752),小米9SE(宽度3603)。这时候如果我在RN中设置360,ios则显示不全。说明如果设计稿是按照375进行设计的话,需要进行一个简单的换算。

RN的样式问题

拿当前屏幕的宽度和设计稿宽度得出换算比例,封装成转换函数即可。

import { Dimensions } from 'react-native';
const defaultWidth = 375;
export let screenW = Dimensions.get('window').width;
const _scaleWidth = screenW / defaultWidth;

export function scaleSize(size: number): number {
    return size * _scaleWidth;
}

纯RN应用还是混合RN应用

纯RN应用还是混合RN应用是两个大方向,取决于你的团队大小和公司规模。它们主要有以下这些区别:

纯RN应用 混合RN应用
性质 业务逻辑都在RN 客户端支持
跳转方式 RN内部跳转 支持Native,H5,RN跳转
入口 单一页面入口 多个页面入口
优点 逻辑统一 定制程度高
缺点 首屏时间长 依赖于客户端的版本

expo 框架未来的发展方向更多是“大而全”的设计模式,它属于纯RN应用,包含了react-native-svgreact-native-vector-icons等开源库,如果你的目标是做一款纯RN应用,没有其他的客户端同事参与,则应该考虑使用expo。特殊的Native定制应该从expo插件的方向出发。

expo react-native-cli
没有ios和android文件夹 有ios和android文件夹
能expo client调试 调试较为麻烦
自带native环境(可eject) 需要自行配置
提供发布工作流 需要自行打包和热更新的机制

混合RN应用则是以“小而美”作为标准,后续的版本RN将会继续执行Lean Core Removals的政策。一些非核心的部分会交给社区(react-native-community)管理,侧面也看出社区的重要性。RN60后,webview netinfo 和 geolocation将会被移除出react native仓库,交给社区管理。精简过后的RN更加具有粘性和生命力,同时也更适合用于混合RN应用。

客户端将native代码和RN代码的混合,在保证核心页面性能的情况下,可以将多变或容易出错的页面可以交给前端同事完成,并实现灵活的热更新服务。

Typescript

typescript大家应该已经不陌生,但是如何将RN和typescript以及babel结合,提高开发效率,增加项目的可维护性。

Eslint

随着tslint的没落,结合eslint强大生态圈,eslint和typescript的结合成为未来的方向。最重要引入的肯定是react-native-community社区提供的规则@react-native-community/eslint-config以及react-native的plugin,有效规避代码里面不符合RN生态的写法。

@typescript-eslint/parser则是用于ts的解析工作。

module.exports = {
  // eslintrc.js
  env: {
    browser: false,
    es6: true,
  },
  extends: ['@react-native-community', 'plugin:prettier/recommended'],
  globals: {
    Atomics: 'readonly',
    SharedArrayBuffer: 'readonly',
  },
  parserOptions: {
    ecmaVersion: 2018,
    sourceType: 'module',
  },
  parser: '@typescript-eslint/parser',
  plugins: ['@typescript-eslint', 'react-native'],
};

Babel

由于RN的打包是使用metro.js,所以很多webpack的技巧,我们没法使用,让很多所谓高级前端工程师触手可及。因此,babel的插件成为了关键点。巧妙的使用babel插件能够提高开发效率。

这里推荐两款babel插件。

环境变量的引入可以有效将变量抽离,提高代码的维护性。还有很多babel插件等待大家的挖掘。

参考

题外话

shopee,又称虾皮,是一家腾讯投资的跨境电商平台。这里加班少,技术氛围好。如果想和我并肩作战一起学习,可以找我内推。邮箱weiping.xiang@shopee.com,非诚勿扰。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,542评论 6 504
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,822评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,912评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,449评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,500评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,370评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,193评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,074评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,505评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,722评论 3 335
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,841评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,569评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,168评论 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,783评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,918评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,962评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,781评论 2 354