如下圖,不解釋
自然災害
遂怒改用GitHub API,一系列改動如下:
- 換名字改用RNGitHub(心好累)
- 升級
react-native
到最新版本(這世界變化真快) - 新版本
ActivityIndicator
兼容Android
,遂棄用react-native-spinkit
,重寫Loading
組件
改名#####
之前提到過盡量不要改名,涉及到的改動比較大,會遇到各種不知名錯誤,趁著本次改動詳細記錄一下:
- 最靠譜的做法是修改
package.json
文件中的name
,然后react-native upgrade
,根據(jù)需要覆蓋各種配置文件 - 其中有一個屬性不會被修改,需要將
AndroidManifest.xml
中的package
屬性修改成對應的包名比如com.rngithub
,包名一般是項目名稱小寫,這也是為什么不要給項目取諸如RN-GitHub
短杠連接字符這樣的名字的原因 - 修改
/index.android.js
主啟動文件主視圖名字AppRegistry.registerComponent('RNGitHub', () => App);
順利的話到此結束,如果已有rnpm link
的組件需要重新link
,第一次react-native run-android
可能出錯是因為以前link
的組件和新生成的有沖突,重新運行一遍即可,如果報java
編譯類錯誤,嘗試cd android && ./gradlew clean
修復,其他問題未遇到,在此不做說明,自行google。
升級react-native
到0.31.0
#####
react-native
畢竟新生,迭代速度那叫一個快,提醒使用的童鞋對于每一個release都要重視,至少要看一下release note,我是從0.27.2
升級的,跨度比較大,遇到的問題也很多,在此記錄以免掉坑。
- 首先一個大的改動在
29
版本,分離了啟動程序,從以前的MainActivity.java
變成現(xiàn)在的MainActivity.java
和MainApplication.java
,猜測目的是將主啟動程序與啟動視圖分離,將抽象類接口化,更好的解耦(我沒分析過源碼,只限個人猜測),官方說明在這里,我是一個搬運工,大致翻譯如下
- 將
MainActivity.java
和MainApplication.java
修改如連接所示樣式,MainActivity,MainApplication如果你已經(jīng)運行react-native upgrade
則無需改動 - 添加
name
屬性,在AndroidManifest.xml
文件中添加如下
<application
android:name=".MainApplication"
...
>
- 如果出現(xiàn)諸如如下錯誤:
Warning: You are manually calling a React.PropTypes validation function for the fontSize
prop on StyleSheet welcome
. This is deprecated and will not work in the next major version. You may be seeing this warning due to a third-party PropTypes library. See[https://facebook.github.io/react/warnings/dont-call-proptypes.html](https://facebook.github.io/react/warnings/dont-call-proptypes.html) for details
需要同時升級react
,配套版本是15.2.1
,npm --save remove react && npm --save install react@15.2.1
棄用react-native-spinkit
并重寫Loading
#####
并不是說這個組件不好,只是一個簡單的loading
我覺得沒必要使用怎么好的組件而已:
修改app/components/loading.js
:
'use strict';
import React, { Component } from 'react';
import {
StyleSheet,
View,
ActivityIndicator,
} from 'react-native';
class Loading extends Component {
render() {
return (
<View style={styles.container}>
<ActivityIndicator size='large' color='#30A9DE'/>
</View>
);
}
}
const styles = StyleSheet.create({
container: {
flex: 1,
alignItems: 'center',
justifyContent: 'center',
}
});
export default Loading;
下篇文章將具體修改界面使用GitHub API,目前還沒有想好如何設計,敬請期待。(.)
最新代碼地址,之前代碼已tag
,可以查看之前的RELEASE。