Learn once, write anywhere: Build mobile apps with React.
1.新建RN項目:
$ react-native init MyProject(項目名稱)
確保項目下有node_modules后,運行$react-native run-android來運行項目男娄。
2.RN基本入門及知識點
2.1入口
Android的入口文件是根目錄下的index.android.js右冻,Ios的入口文件是根目錄下的index.ios.js.
2.2 AppRegistry是JS運行所有React Native應(yīng)用的入口。應(yīng)用的根組件應(yīng)當通過AppRegistry.registerComponent方法注冊自己,然后原生系統(tǒng)才可以加載應(yīng)用的代碼包并且在啟動完成之后通過調(diào)用AppRegistry.runApplication來真正運行應(yīng)用澜驮。
eg: ?AppRegistry.registerComponent('Helloworld', () => TestComponent);
其中Helloworld是你的項目名稱,TestComponent是你的入口組件的名稱。
2.3基本組件
常用的基本組件有Button, View, Image, ListVie碰逸,Textw等等,這些組件的引入方法是:import {Button阔加,View, Image, ListView} from‘’react-native.
使用方法:
hello world
2.4組件顯示的布局(flexBox布局詳解)
我們在React Native中使用flexbox規(guī)則來指定某個組件的子元素的布局花竞。Flexbox可以在不同屏幕尺寸上提供一致的布局結(jié)構(gòu)。
在組件中的style中指定flexDirection可以決定布局的主軸,子元素是按著水平軸(row)排列约急,還是數(shù)值軸(colum,默認值)排列苗分。flex:定義了元素的可伸縮能力厌蔽。默認值是0
在組件中的style中指定justifyContent可以決定子元素沿著主軸的排列方式∷ぱⅲ靠近起始端:flex-start(默認)奴饮。 靠近末端:flex-end。 中心:center择浊。space-around和space-between戴卜。
在組件的style中指定alignItems可以決定其子元素沿著次軸(與主軸垂直的軸,比如若主軸方向為row琢岩,則次軸方向為column)的排列方式投剥。
對應(yīng)的這些可選項有:flex-start(靠近次軸起始端)、center(次軸中心)担孔、flex-end(次軸末尾段)以及stretch(元素被拉伸以適應(yīng)容器)江锨。
注意:要使stretch選項生效的話,子元素在次軸方向上不能有固定的尺寸糕篇。
使用方法(完整RN Demo):
2.5自定義組件
自定義組件需要繼承React.Component啄育。組件渲染的方法是render()。最基本的用法是:
class MyComponent extends React.Component{
render() { ??//這個方法是必須的
Return(); ?//返回要顯示的view最外層只能有一個view
}
}
導(dǎo)出組件:export default(default只能使用一次)MyComponent
導(dǎo)入組件:import MyComponent from‘./XX.js’
export命令規(guī)定的是對外的接口拌消,必須與模塊內(nèi)部的變量建立一一對應(yīng)關(guān)系挑豌。export,import可以處在任何位置墩崩,但必須是在模塊頂層氓英。 使用export default時import后不加{}。 若使用export時泰鸡,import后需要加{}债蓝。
2.6自定義樣式:
const styles = StyleSheet.create({
XXX,
XXX
});
1.props和state的使用及區(qū)別
Props:大多數(shù)組件在創(chuàng)建時就可以使用各種參數(shù)來進行定制。用于定制的這些參數(shù)就稱為props(屬性)盛龄。
以常見的基礎(chǔ)組件Image為例饰迹,在創(chuàng)建一個圖片時,可以傳入一個名為source的prop來指定要顯示的圖片的地址余舶,以及使用名為style的prop來控制其尺寸啊鸭。
自定義的組件也可以使用props。通過在不同的場景使用不同的屬性定制匿值,可以盡量提高自定義組件的復(fù)用范疇赠制。只需在render函數(shù)中引用this.props,然后按需處理即可。
組件A ->組件B钟些。 組件A中傳遞的常量(如name)烟号,在組件B中可以通過this.props.name來得到。無論是function還是class都不能修改自身的props政恍。
State:我們使用兩種數(shù)據(jù)來控制一個組件:props和state汪拥。props是在父組件中指定,而且一經(jīng)指定篙耗,在被指定的組件的生命周期中則不再改變迫筑。 對于需要改變的數(shù)據(jù),我們需要使用state宗弯。
一般來說脯燃,你需要在constructor中初始化state,然后在需要修改時調(diào)用setState方法蒙保。
假如我們需要制作一段不停閃爍的文字辕棚。文字內(nèi)容本身在組件創(chuàng)建時就已經(jīng)指定好了,所以文字內(nèi)容應(yīng)該是一個prop追他。而文字的顯示或隱藏的狀態(tài)(快速的顯隱切換就產(chǎn)生了閃爍的效果)則是隨著時間變化的坟募,因此這一狀態(tài)應(yīng)該寫到state中。
2.constructor()方法--構(gòu)造函數(shù)
一般構(gòu)造函數(shù)都會先super(props)邑狸;
3.方法的定義
function functionName() {
}
在類的內(nèi)部不使用關(guān)鍵字function
functinName(x, y){}或者是functionName:(x, y)=> {}(箭頭函數(shù))
4.使用導(dǎo)航器實現(xiàn)頁面的跳轉(zhuǎn)
StackNavigator
TabNavigator
DrawerNavigator
5.let const var的用法
const只可以初始化常量
var定義變量懈糯,若不初始化或輸出undeifne,不會報錯
let它的作用域是塊級单雾,用法類似于var赚哗。(for循環(huán)中可用let)
6.生命周期
7.Redux
Redux的設(shè)計思想很簡單,就兩句話硅堆。
(1)Web應(yīng)用是一個狀態(tài)機屿储,視圖與狀態(tài)是一一對應(yīng)的。
(2)所有的狀態(tài)渐逃,保存在一個對象里面够掠。
react-redux:
React-Redux將所有組件分成兩大類:UI組件(presentational component)和容器組件(container component)。
React-Redux提供connect方法茄菊,用于從UI組件生成容器組件疯潭。connect的意思,就是將這兩種組件連起來面殖。
connect方法的完整API如下竖哩。
import { connect } from 'react-redux'
const VisibleTodoList = connect(
mapStateToProps,
mapDispatchToProps
)(TodoList)
Provier:
import { Provider } from 'react-redux'
render(
)
這樣App下的所有子組件都可以拿到state
10.零散知識點梳理:
(1)...items其中三個點(...)表示擴展運算符。是一個將數(shù)組用脊僚,分割開的參數(shù)序列相叁。
(2)箭頭函數(shù):functionName:(x)=>{} ?=== functionName(x) {}
(3)注意this的使用:禁止this指向全局對象。即頂層的this指向undefined。
(4)塊級作用域時可以用let代替var
(5)全局常量和線程安全
在let和const之間增淹,建議優(yōu)先使用const椿访,尤其是在全局環(huán)境,不應(yīng)該設(shè)置變量埠通,只應(yīng)設(shè)置常量赎离。
const優(yōu)于let有幾個原因。一個是const可以提醒閱讀程序的人端辱,這個變量不應(yīng)該改變;另一個是const比較符合函數(shù)式編程思想虽画,運算不改變值舞蔽,只是新建值,而且這樣也有利于將來的分布式運算码撰;最后一個原因是JavaScript編譯器會對const進行優(yōu)化渗柿,所以多使用const,有利于提供程序的運行效率脖岛,也就是說let和const的本質(zhì)區(qū)別朵栖,其實是編譯器內(nèi)部的處理不同。
const聲明常量還有兩個好處柴梆,一是閱讀代碼的人立刻會意識到不應(yīng)該修改這個值陨溅,二是防止了無意間修改變量值所導(dǎo)致的錯誤。
所有的函數(shù)都應(yīng)該設(shè)置為常量绍在。
長遠來看门扇,JavaScript可能會有多線程的實現(xiàn)(比如Intel的River Trail那一類的項目),這時let表示的變量偿渡,只應(yīng)出現(xiàn)在單線程運行的代碼中臼寄,不能是多線程共享的,這樣有利于保證線程安全溜宽。
(6)靜態(tài)字符串一律使用單引號或反引號吉拳,不使用雙引號。動態(tài)字符串使用反引號适揉。
(7)簡單的留攒、單行的、不會復(fù)用的函數(shù)涡扼,建議采用箭頭函數(shù)稼跳。如果函數(shù)體較為復(fù)雜,行數(shù)較多吃沪,還是應(yīng)該采用傳統(tǒng)的函數(shù)寫法汤善。
11.完整的component組成:
limport xxx from‘’
l此處可以定義頂層的常量,function, 或者cla
lexport {xx红淡,xx}
Init class demo:
class ClassDemo extends React.Component {
constructor(props: xxType) {
super(props)
this.state={
name:’hello’,
index:1
}
}
componentWillMount() {}
render () {
return(
return(
this.function1()}/>
);
);
}
componentDidUpdate () {}
function1(){}
function2() {}
}