ReactNative前端开发者

文档版本0.0.2

Author: Necfol

说明: 本文档用于指导前端React Native的开发,如需开发其他其他框架应用,不适用本文档

前期准备

  1. ReactNative 的基本概念ReactNative文档
  2. es6 开发基本知识 es6 基本文档
  3. Node 环境(Node >=5.0.0,Yarn)下载地址
  4. Android Studio环境Android Studio
  5. Xcode 环境(Mac适用)

1、搭建脚手架

1.1、安装脚手架工具

通过 npm 安装 React Native 脚手架命令行工具

npm install -g yarn react-native-cli

1.2、初始化脚手架

由于官方RN0.45版本有问题,推荐使用0.44.3稳定版本

$ react-native init ${your_project} --template micrn --version 0.44.3

如果需要特定版本则:

$ react-native init ${your_project} --template micrn --version ${version}

如果需要最新版本则:

$ react-native init ${your_project} --template micrn --version

例如: react-native init test --template micrn --version 0.44.3

命令会在当前的文件夹下生成一个文件夹,这个文件夹就是我们的项目文件夹

2、 运行项目

1.进入上一步创建的文件夹,运行命令(初次运行此项目时需要输入)

node script/addDev.js

命令运行后,会去下载相关的dev依赖,并且替换包名称。这是由于React Native官方提供的构建模板生成工具不支持devDependencies,所以自定义devDependencies.json文件,项目生成之后,通过脚本把devDependencies.json中的依赖依次安装并且添加到package.json中;官方提供的构建模板生成工具也不支持自动在template构建的项目中替换应用名称,这个脚本也达到了自动替换应用名称的目的。
2.然后启动项目

ios(Mac环境): react-native run-ios
android: react-native run-android

安卓在运行项目之前,需要先打开Android Studio运行安卓模拟器!!!即AVD Manager. 安卓第一次运行的时候,命令行下载依赖可能比较慢,可以参考安装,通过Android Studio进行快速安装依赖。 项目启动在ios模拟器,或者安卓模拟器上,并且会打开命令行运行构建服务, ⚠️ 不能把进程杀掉! 可以通过chrome 安装调试工具,或者安装react-native-debugger,再或者React Developer Tools

3、项目基本结构

3.1、目录说明

my-project
├── __tests__
├── android //安卓工程项目
├── ios //ios工程项目
├── script //脚本文件存放处
├── src //项目源代码,开发人员编写的源代码都在这个目录下
│ └── action //redux中放置action的文件夹
│ │ └── home.js //home的action
│ │ └── type //存放action type的文件夹
│ └── components //页面级别的公用组件, 例如在某个项目里共同使用的用户信息展示, 某些共用的复杂弹窗等等
│ │ └── QRScan.js //二维码/条形码扫描
│ └── container //业务模块文件夹, 按照业务逻辑区分的业务模块文件夹
│ │ └── Home.js //首页
│ └── reducer //redux中放置reducer的文件夹
│ │ └── index.js //combine所有reducer
│ │ └── nav.js //navigation的reducer
│ │ └── home.js //home页面的reducer
│ └── app.js //入口
│ └── routerConfig.js //路由
│ └── configStore.js //redux中间件添加,调试工具配置
│ └── root.js //navigation根页面
├── .buckconfig
├── .flowconfig
├── .gitattributes
├── .npmignore
├── jsconfig.json
├── app.json
├── .babelrc //babel配置
├── .gitignore
├── README.md
├── index.android.js //android应用入口
├── index.ios.js //ios应用入口
├── package.json
├── yarn.lock

3.2、目录规范

  1. container 目录下有一个业务建一个子文件夹, 文件夹以驼峰命名, 其他文件也以驼峰命名
  2. components 目录下也分别建子文件夹, 文件夹以驼峰命名,其他文件也以驼峰命名

4、我要开发Template

如果我们想要开发或者更新Template该怎么办?
1.通过Template构建测试项目,在这个项目中开发您的代码
2.开发完之后,将测试项目所有的依赖正确添加到Template项目的dependencies.json和devDependencies.json中,如果需要增加测试页面,请将相关文件也拷贝到Template项目中, ⚠️ 一定要确认无误方可提交,并且发布。
3.更新package.json中的版本号,提交代码
4.命令行执行

npm publish

5.enjoy it

5、组件使用提示

  1. 扫一扫
    使用iOS 10或者更高版本时,需要在项目info.plist中增加相机使用权限,�该文件在'your_project/ios/your_project/Info.plist',请增加以下代码:
<key>NSCameraUsageDescription</key>
<string>Your message to user when the camera is accessed for the first time</string> <!-- Include this only if you are planning to use the camera roll -->
<key>NSPhotoLibraryUsageDescription</key>
<string>Your message to user when the photo library is accessed for the first time</string> <!-- Include this only if you are planning to use the microphone for video recording -->
<key>NSMicrophoneUsageDescription</key>
<string>Your message to user when the microsphone is accessed for the first time</string>
  1. 图片缓存

以下步骤在0.1.6及以上版本已经集成到addDev.js中,只需要在下载完跑脚本即可,可忽略

第一次使用图片缓存时需要运行

RNFB_ANDROID_PERMISSIONS=true react-native link react-native-fetch-blob

并且在项目android/app/src/AndroidManifest.xml中添加

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>

之后使用图片缓存即可按照文档来react-native-cached-image

⚠️ 如果ios加载图片必须是https
⚠️ 对于安卓加载gif图片,需要在项目的/android/app/build.gradle的dependencies中添加

dependencies {
compile 'com.facebook.fresco:animated-base-support:0.14.1'
compile 'com.facebook.fresco:animated-gif:0.14.1'
}

之后重新运行 react-native run-android

ReactNative前端开发者的更多相关文章

  1. 14款让前端开发者心动的jQuery/CSS3插件及源码

    14款让前端开发者心动的jQuery/CSS3插件及源码,一起来看看. 1.jQuery左右滚动banner代码! DEMO演示    /    源码下载 2.jQuery QQ表情插件qqFace ...

  2. 最受Web前端开发者欢迎的五大开发工具

    工其事,必利于器.好的开发工具毋容置疑会帮助Web前端开发者事半功倍,51CTO在上期主办的技术沙龙<大型网站PHP开发之道> 对现场的百余位Web开发者做了问卷调查,后经51CTO调研小 ...

  3. 前端开发者应当了解的 Web 缓存知识

    缓存优点 通常所说的Web缓存指的是可以自动保存常见http请求副本的http设备.对于前端开发者来说,浏览器充当了重要角色.除此外常见的还有各种各样的代理服务器也可以做缓存.当Web请求到达缓存时, ...

  4. 前端开发者使用JS框架的三个等级

    目前前端开发者使用JS框架是种很普遍的现象,因为框架可以加快开发速度,同时避免各类浏览器的兼容性问题.不过同样是用框架开发,不同开发者的境界水平还是有一定差距,本文将这些前端开发者分为三个等级. 第一 ...

  5. 「前端开发者」如何把握住「微信小程序」这波红利?

    由于前两周一直在老家处理重要事情,虽然朋友圈被「微信小程序」刷爆了,但并没有时间深入了解. 昨天回广州之后,第一件事情就是把「微信小程序」相关的文章.开发文档.设计规范全部看了一遍,基本上明白了「微信 ...

  6. 参加IMWebConf 2017 前端开发者大会是什么体验?

    周六作为特邀讲师之一参加了IMWebConf 2017 前端开发者大会的主题演讲,主题为<WebAssembly:面向未来的web开发技术>.本次大会质量非常高,来自国内外的技术专家带了很 ...

  7. 一个前端开发者换电脑的过程(IDE篇)

    一台全新的电脑,需要做出怎样的改变,才可以摇身一变成为前端开发者能用的电脑呢.首先,我们需要安装一个编辑器,这里我们选择目前最火的vscode. 先去到它的官网,把对应版本的vscode下载下来. 然 ...

  8. 12个实用的 JavaScript 框架分享给前端开发者

    JavaScript库是预先编写的 JavaScript 工具代码,让开发者可以更容易开发 JavaScript 应用.这个列表我们列出了2017年1月份功能丰富的 JavaScript 库,可以帮助 ...

  9. 个人前端学习路线图与github优秀前端开发者的路线图推荐

    1.个人目前学习的路线图 2.github优秀前端开发者的路线图推荐 打开github首页,在搜索框输入developer-roadmap,搜索github前端路线图 选择kamranahmedse/ ...

随机推荐

  1. Oracle —— 如何执行SQL文件

    在Command模式下(笔者使用的是 PL/SQL Comand Window),输入 @文件路径\文件名 如: @D:\ORA_SQL\INSERT_SQL.sql

  2. 原生js--应用程序存储和离线web应用

    1.应用程序缓存和其它存储方式的区别: a.不像localStorage和sessionStorage那样只存储web应用程序的数据,它将应用程序自身存储起来. b.不像浏览器缓存一样会过期或者被用户 ...

  3. 注意@ Override不同版本的区别

    @Override注解用于方法的覆写上,它在编译期有效,也就是Java编译器在编译时会根据该注解检查是否真的是覆写,如果不是就报错,拒绝编译. 该注解很大程度解决我们的误写问题,比如子类和父类的方法名 ...

  4. 用Ant给Unity3D导出Eclipse工程打包APK

    我们经常需要出完apk后,告诉我们改版本号,或者包名什么的,但是每次打包时间又很长.索性我们就出一个eclipse工程,然后用ant自动打包. 1.设置环境变量 2.生成build.xml文件 and ...

  5. maven用变量的方法统一管理jar包版本

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  6. selenium中javascript调试

    之前写了使用js输入长文件的文章,有同事在使用时,发现竟然无法输入,也不知道是什么原因,且用的还是id方式. 在参考网文后,才发现是js写的有问题,现总结一下 javascript调试,在firefo ...

  7. C++ 输入/输出

    std:: 是什么?有什么作用? 输入和输出的iostream 库.iostream 库的基础是两种命名为 istream 和 ostream 的类型,分别表示输入流和输出流. 标准库定义了 4 个 ...

  8. html5 canvas时钟

    基础知识点:                canvas标签只是图形容器,您必须使用脚本来绘制图形. getContext() 方法可返回一个对象,该对象提供了用于在画布上绘图的方法和属性.——获取上 ...

  9. SQL已存在则更新不存在则插入

    不废话,下代码. replace into T_Life_UMessage(message_id,account,isread,isdelete)values(?,?,1,1) 意思是若不存在则插入要 ...

  10. MySQL double 类型查询不准确的问题

    问题 有如下查询: SELECT * FROM <table-name> WHERE price > 32.99; 结果竟然包含了 32.99 的数据行. 原因 price 的类型是 ...