React-native 安装基础篇
RN官方文档 (0.55):
RN
中文翻译
文档 (0.51):
推荐博客
ES6
语法学习(阮一峰)
以下基于MacOS
一、安装工具
1、 安装 homebre
1 | /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" |
2、然后 安装 node.js
1 | brew install node |
3、 配置node
国内镜像
1 | # (1)修改 下载仓库为淘宝镜像 |
4、Yarn、React Native的命令行工具(react-native-cli)
1 | # Yarn是Facebook提供的替代npm的工具,可以加速node模块的下载。 |
二、安装、配置 RN
1、下载 RN
1 | # 第1️⃣种 -> 第一次新项目空文件安装 |
2、根据package.json
安装相应的 react-native
+ React
以及第三方
1 | npm init #(这个工作跟cocoapods的podfile文件初始化有点像)-> 根据package.json配置内容,进行安装。 |
3、添加 yarn (react-native依赖管理工具)
1 | yarn add react-native |
4、工程根目录 使用命令(这个会很慢很慢,取决你的网络)
1 | npm install |
5、进入项目目录(我的是 ./ios/) ,如果你已经安装Cocoapods 了
1 | # Podfile 设置 |
6、react-native (启动 本地Node服务,方便实时用nodo.js去解析ES6的代码->main.bundle.js
)
在React Native项目根目录下运行
1 | npm start / react-native start |
7、index.ios.js
生产可执行的文件(可被RN-server 找到) (作为测试用,真正开发需要 react-native bundle.........
)
1 | curl http://localhost:8081/index.ios.bundle -o main.jsbundle |
8、重新 启动RN服务问题
凡是遇到 终端命令错误等的问题,记得先 彻底关闭 终端
,在去执行,可能就好了。
或者
1 | # 查看`Node.js服务运行进程`命令 |
编译项目 之前,一定要自测
1、先 运行React Native
(上面的第6步)
2、看看index.js + ...js
是否有问题 (上面的 第7步)
3、你的 jsCodeLocation
是以何种方式 写的, 是否执行你的js
- (1)是 NSBundle 走Xcode的
Copy Bundle resources
里面找文件 xx.jsbundle- (2) [NSURL filexxx] ,就是改 app 目录下里面找文件 xx.jsbundle
- (3) [NSURL urlWithxx] 很遗憾,这个不支持,可能RN觉得不安全
- 这个我们可以先下载xx.jsbundle, 然后执行 (2) 步【注意 安全保护处理】
4、针对错误 或者 想要调试的(针对变量等) 可以采用 debugger模式
–> React-Native
+iphone/Android
+ Google Chrome
- 模拟器
菜单
iPhone->Command
+D
、Android-> 百度上有很多教程 以及安卓夜神模拟器
- iPhone->
Command
+R
、Android->R+R
- 真机
- 摇晃
三、 运行项目错误
1、如果有用的文件,一定确保文件在 app
的目录里
2、确保js 文件正确(上面)
3、确保js 调用的RN库,你的项目RN都保函这些库(包括自带、第三方)
4、RN 以及 支持的第三方,Xcode编译通过
WARN eslint-plugin-react-native@3.2.1 requires a peer of eslint@^3.17.0 || ^4.0.0 but none is insta …
- package.json 文件追加 最后2行代码
1 | ... |
React-Native特性
一、RN 提供了四种点击事件
- 1、TouchableHighlight : 可编写点击的 背景色、透明度,只支持一个子节点
- 2、TouchableNativeFeedback : 仅限Android平台
- 3、TouchableWithoutFeedback : 点击没有任何颜色变化,只支持一个链单节点
- 4、TouchableOpacity : 此组件与TouchableHighlight的区别在于并没有额外的颜色变化,继承了所有TouchableWithoutFeedback的属性,并支持多个子节点
二、React认为一个组件应该具有如下特征:
- 可组合(Composeable):一个组件易于和其它组件一起使用,或者嵌套在另一个组件内部。如果一个组件内部创建了另一个组件,那么说父组件拥有它创建的子组件,通过这个特性,一个复杂的UI可以拆分成多个简单的UI组件;
- 可重用(Reusable):每个组件都是具有独立功能的,它可以被使用在多个UI场景;
- 可维护(Maintainable):每个小的组件仅仅包含自身的逻辑,更容易被理解和维护;
三、在React Native(React.js)里,组件所持有的数据分为两种:
- 属性(props):组件的props是不可变的,它只能从其他的组件(例如父组件)传递过来。
- 状态(state):组件的state是可变的,它负责处理与用户的交互。在通过用户点击事件等操作以后,如果使得当前组件的某个state发生了改变,那么当前组件就会触发render()方法刷新自己。
四、组件也有生命周期,大致分为三大阶段:
- Mounting:已插入真实 DOM
- Updating:正在被重新渲染
- Unmounting:已移出真实 DOM
五、React 中组件的几种通信方式,分别是:
- 父组件向子组件通信:使用 props
- 子组件向父组件通信:使用 props 回调
- 跨级组件间通信:使用 context 对象
- 非嵌套组件间通信:使用事件订阅