react-native知识点记录

一、 数据+状态方案记录

  1. 页面发起actions

  2. store中掉接口

  3. 接口通过api封装,非交互数据请求到后做model处理(仅部分数据做了)

  4. model后的数据通过reducer存入state

  5. 通过connect将state按需注入页面

形成闭环,首屏数据统一存入state,api和action结合,页面注入和触发,形成前端小范围mvc结构

二、罗列知识点

基本知识

  1. react的jsx写法

  2. es6,7用法

  3. react-native提供的api

四大支柱

  1. axios封装和配置

  2. redux生态链

  3. react-navigation各项配置

  4. 公共方法的归类和注入

板块设计

  1. 板块规则

  2. 组件树设计

插件和原生

  1. 熟悉react-native社区

  2. 看懂插件文档

  3. 原生的基本知识

三、 热更新和热部署

RN最吸引人的特性就是可以在ios和安卓上实现热部署,避过app store的审查

原理

  1. 本地代码集成codepush的sdk

  2. 将更新后的内容发布到codepush

  3. 本地代码每次打开时会比对codepush服务器上的版本和本地版本是否一致,不一致会触发更新

  4. 实现实时更新

具体配置地址

https://www.jianshu.com/p/6a5e00d22723

一些命令

  1. 查看当前登录用户
    code-push whoami

  2. 创建应用
    // code-push app add 应用名 版本 平台
    code-push app add test-android android react-native

  3. 查看当前已创建 app 应用列表
    code-push app list

  4. 重命名app:code-push app rename <appName> <newAppName>

  5. 移除app:code-push app rm <appName>

  6. 查看app的部署:code-push deployment ls <appName> [--displayKeys|-k]

  7. 查看app的某个部署的发布更新的历史记录:code-push deployment history <appName> <deploymentName> [--displayAuthor|-a]

  8. 发布更新:code-push release-react 《应用名》 ios -t "1.0.0" --des "测试热更新" -d Staging

  9. debug:code-push debug <platform>

  10. 查看已应用对应的 key 值 code-push deployment ls 《应用名》 -k

  11. 清空app的更新 code-push deployment clear <appName> Production or Staging

四、 react-navigation

RN最常用的路由组件

简介

react-navigation分为三个部分。

  1. StackNavigator类似顶部导航条,用来跳转页面和传递参数。

  2. TabNavigator类似底部标签栏,用来区分模块。

  3. DrawerNavigator抽屉,类似从App左侧滑出一个页面。

const TabNav = createBottomTabNavigator(tabNavRouteConfig, tabOptionConfig);

const AppNavigator = createStackNavigator(stackRouteConfig,stakeOptionConfig);

const AppContainer = createAppContainer(AppNavigator);

<AppContainer onNavigationStateChange={this.onNavigationStateChange} />

  • routeConfig为路由路径配置参数

  • optionConfig为导航定制相关参数

  • AppContainer将导航封装为组件

  • appContainer中的页面就可以使用this.props.navigation.navigate(routeName,params)跳转

五、 三方处理

需要link

  1. react-native-device-info

注意 该库使用的是androidx,和当前大部分android support不兼容

  1. react-native-gesture-handler

  2. react-native-i18n

  3. react-native-image-crop-picker

  4. react-native-picker

  5. react-native-signature-capture

  6. react-native-splash-screen

  7. react-native-webview

  8. rn-fetch-blob

六、 当androidx和support冲突时

  1. 通过./gradlew :app : dependencies查看哪个依赖使用了androidx

  2. 回退该依赖为支持support的版本

七、 集成自定义iconfont

  1. 安装react-native-vector-icons插件

  2. 书写icon组件,调用上述插件的create方法

  3. 在阿里iconfont选择对应的icon并下载

  4. 使用工具将ttf文件生成对应的json文件

  5. ios:将ttf文件引入build phase的link中

  6. ios: 在info 中添加iconfont.ttf信息

  7. android: 在app/build中添加以下代码

project.ext.vectoricons = [
    iconFontNames: ['iconfont.ttf' ] //添加你需要赋值的字符文件
]
apply from: "../../node_modules/react-native-vector-icons/fonts.gradle"

  1. android: 将生成的ttf文件复制到app/src/main/assets/fonts文件中

八、 国际化

问题

  1. react-native-i18n设置语言后无法实时更新

  2. 页面必须手动触发render才会有效果

  3. react-navigation中的tabbar和title也无法更新

解决思路

  1. 所有页面都是由react-navigation包裹的,触发react-navigation的更新即可刷新所有页面
 let { refresh } = this.state;
    return (
      <Root>
        <AppNavigator
          onNavigationStateChange={this.onNavigationStateChange}
          screenProps={{ refresh }}
        />
      </Root>
    );

通过eventBus触发refresh的更新

  1. 底部tabbar在页面渲染之前就生成了,故上述一对tabbar无效
<AppNavigator
          onNavigationStateChange={this.onNavigationStateChange}
          screenProps={{ refresh, tabLabel }}
        />


navigationOptions: ({ screenProps }) => ({
      tabBarLabel: screenProps.tabLabel.home,
      tabBarIcon: ({ tintColor, focused }) => (
        <Icon name={focused ? "home2" : "home1"} size={25} color={tintColor} />
      ),
      header: null
    })

通过ScreenProps将值传入createBottomTabNavigator,然后在跟页面里设置ScreenProps,并在eventBus回调中动态改变

九、 启动图和图标

图标

  1. ios:通过图标工厂制作不同尺寸图标

  2. ios:选择images.xcassets,并按appicon的设置将不同尺寸的图片上传

  3. ios:在general中选择appicon

  4. android:通过图标工厂制作不同尺寸的图片

  5. android:将图标放入app/src/main/res文件夹下

  6. android:在androidManifest中改图标名称

启动图

  1. 通过图标工厂制作安卓和ios不同尺寸的图标

  2. ios: 在images.xcassets中添加launchImages,并按尺寸上传

  3. ios:删除launchScreen.xib文件

  4. ios:general中选择launchImages,launchScreenfile为空

  5. 删除app,重新加载

  6. android:将生成的图标放入app/src/main/res文件加下

  7. android: 在上述文件夹下新建layout/launch_screen.xml,内容如下

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

推荐阅读更多精彩内容