咱們在學會搭建react-native環境以後,打開項目根目錄,看到不少個文件,可是最起眼的應該就是那倆js兄弟文件了javascript
咱們一看那名字就知道,咱們接下來的任務就是要弄它們:css
咱們用編輯器打開項目根目錄下的index.android.js文件,能夠看到有這麼個東西:html
那麼咱們先測試一下,在手機上跑起來。不知道你們還記不記得步驟:前端
第一步:在項目根目錄下打開兩個git bash.第一個輸入:react-native start 這一步是在啓用服務器java
第二步:在第一步成功以後,鏈接手機,開啓開發者模式,在第二個git bash 中輸入:react-native run-androidreact
等待幾分鐘就能夠看到手機上顯示的結果了:android
大家能夠看到代碼的第12行到第21行,是否是就恰好是咱們這個圖片顯示的內容呢!git
咱們能夠把代碼裏Text組件裏面的文字內容任意修改,而後reloadJs,就能夠看到顯示的界面跟着一塊兒變了,是否是很神奇!es6
好了,不開玩笑,咱們首先要弄懂怎麼樣寫出這樣的代碼,咱們還須要補充哪些知識點。web
若是你沒有接觸過reactJS,咱們首先要掌握的 第一個知識點:reactJS。
而後咱們看到代碼的第一行,得出咱們須要掌握的 第二個知識點:ES6的新語法。
咱們看下面這段代碼:
很明顯這是使用駝峯命名法設置css樣式。
可是咱們看到的justifyContent和alignItems是個什麼東西,咱們隨便一查就知道,這是咱們要學習的第三個知識點:flexbox而局
咱們下面就來粗講一下這三個知識點,爲何是粗講?
由於咱們只是爲了react-native快速入門打基礎,其餘深層次的東西,咱們用多了就熟了。
第一個知識點:ES6新特性
let能夠聲明具備塊級做用域的變量,const是用來定義常量的。
for (let i=0; i<5; i++) { console.log('sm') } console.log(i) // Error: i is not defined const fix = {} fix.some = 'sm' console.log(fix.some) // sm fix = new Array(2, 3, 3) // Error: "fix" is read-only
const定義引用類型時,是指引用的地址不可變
箭頭函數,箭頭函數能夠簡化匿名函數的寫法,而且能夠將this靜態綁定到對象,而不會因運行上下文的變化而變化:
function Person() { this.name = 'Person' this.hello = () => { console.log(this.name) } } var test = new Person test.hello.bind({name: 'test'})() //Person
這裏在箭頭函數裏,this對象已經靜態綁定到Person這個對象了,不會隨着運行上下文的改變而改變。
function plus(x, y=2333) { console.log(x + y) } plus(4333) // 6666
能夠經過...形參將參數轉化爲數組,跟arguments做用相似,只不過箭頭函數內部是取不到arguments的值的
function sum(...values) { let result = 0 for (let val of values) { result += val } return result } console.log(sum(2, 3, 5)) //10 sum(...[2, 3, 5]) //等價於 sum.apply(undefined, [2, 3, 5]) -> 10 //因此能夠直接這樣用 let arr = [45, 23, 4325] sum(...arr) // 等價於 sum.apply(undefined, arr) -> 4393
解構賦值,按照必定的規則從數組和對象中提取值,對變量進行賦值
let [cat, dog] = [ {hello: 'wang'}, {hello: 'miao'} ] console.log(cat.hello) //wang //在取json數據時尤其方便 let jsonData = { supplierId: '2333', name: 'ORZ', code: 6666 } let {supplierId: id, name, code} = jsonData
使用BABEL編譯後變成這樣
'use strict'; var cat = { hello: 'wang' }; var dog = { hello: 'miao' }; console.log(cat.hello); //wang var jsonData = { supplierId: '2333', name: 'ORZ', code: 6666 }; var id = jsonData.supplierId; var name = jsonData.name; var code = jsonData.code;
這個東西很是有用,在插入大段html內容到文檔中時,顯得很方便
let [cat, dog] = ['sss', 'mmm'] console.log(`My cat's name is ${cat} and my dog's name is ${dog}`)
使用Class語法糖能夠很方便地實現類以及繼承代碼
class Person { constructor(name) { this.name = name } hello() { console.log(`My name is ${this.name}`) } } class Student extends Person { constructor(name, studentNumber) { super(name) this.studentNumber = studentNumber } intro() { this.hello() console.log(`My student Number is ${this.studentNumber}`) } } let student = new Student('hwen', 13) student.intro() //My name is hwen //My student Number is 13
super指代父類的實例(也便是父類的this對象)。子類必須在constructor方法中調用super方法,不然新建實例時會報錯。
這是由於子類沒有本身的this對象,而是繼承父類的this對象,而後對其進行加工。
在ES6以前,模塊化的解決方案通常有兩種:CommonJS(服務器端)和AMD(瀏覽器端,如require.js,可是在此以前,其實我也沒用過它們),、
須要注意的是大括號裏的變量名需與模塊裏export的接口名稱相同,引入其餘模塊的默認值(default)能夠直接寫在大括號外
//some.js export defalut 'worker' export function sm() { return 'do something' } export const time = 1000*60*60 //index.js import people, { sm as something, time } from './some' let work = something() console.log(`${people} ${work} for ${time / (1000 * 60)} min`) //worker do something for 60 min
詳情-阮一峯的電子書:http://es6.ruanyifeng.com/#docs/intro
第二個知識點:reactJs
既然你敢說學react-native,應該不至於沒了解過reactJS吧。
這已是一個很是流行的框架,你們必定都有去了解一些相關知識,其實做爲react-native入門,瞭解一些就夠用了。
React是由ReactJS與React Native組成,其中ReactJS是Facebook開源的一個前端框架,React Native 是ReactJS思想在native上的體現!
JSX並非一門新的語言,僅僅是個語法糖,容許開發者在JavaScript中書寫HTML語法。,最後每一個HTML標籤都轉化爲JavaScript代碼來運行。
其實咱們須要掌握的東西很少,你只要能寫出這個就夠了,so easy!
整個代碼的邏輯就是:
經過構建一個一個HelloMessage的組件,
組件的內容爲一個h1標籤,h1標籤裏輸出hello+HelloMessage的name屬性值+!我是wushaoxion
並將HelloMessage插入到id爲example的div中。
輸出的結果爲:hello ReactJs! 我是wushaoxion
若是你想了解更多,或者你徹底沒接觸過reactJs,能夠去看看阮一峯的博客:http://www.ruanyifeng.com/blog/2015/03/react.html
第三個知識點:flexbox佈局
這是最簡單的一個內容了。可是我卻很很差意思的放在了最後面。
flexbox是Flexible Box的縮寫,彈性盒子佈局主流的瀏覽器都支持。flexbox佈局是伸縮容器(container)和伸縮項目(item)組成
Flexbox佈局的主體思想是元素能夠改變大小以適應可用空間,當可用空間變大,Flex元素將伸展大小以填充可用空間,當Flex元素超出可用空間時將自動縮小。總之,Flex元素是可讓你的佈局根據瀏覽器的大小變化進行自動伸縮。
伸縮容器有主軸和交叉軸組成!主軸既能夠是水平軸,也能夠是垂直軸
flexbox目前還處於草稿狀態,全部在使用flexbox佈局的時候,須要加上各個瀏覽器的私有前綴,即-webkit -moz -ms -o等
可是在作移動端頁面的時候,這也是一個很不錯的佈局方式
伸縮容器的屬性
1.display
display:flex | inline-flex 塊級伸縮容器行內級伸縮容器
2.flex-direction
指定主軸的方向 flex-direction:row(默認值)| row-reverse | column | column-reverse
3.flex-wrap
伸縮容器在主軸線方向空間不足的狀況下,是否換行以及該如何換行flex-wrap:nowrap(默認值) | wrap | wrap-reverse
4.flex-flow
是flex-direction和flex-wrap的縮寫版本,它同時定義了伸縮容器的主軸和側軸, row
5.justify-content
用來定義伸縮項目在主軸線的對齊方式,語法爲:justify-content:flex-start(默認值)| flex-end | center | space-between | space-around
6.align-items
用來定義伸縮項目在交叉軸上的對齊方式,語法爲:align-items:flex-start(默認值)| flex-end | center | baseline | stretch
7.align-content
用來調整伸縮項目出現換行後在交叉軸上的對齊方式,語法爲:align-content:flex-start | flex-end | center | space-between | space-around | stretch(默認值)
咱們暫且沒必要要了解太多,明白在RN中怎麼使用就能夠了
RN目前主要支持flexbox的以下6個屬性:
1.alignItems
用來定義伸縮項目在交叉軸上的對齊方式,語法爲:alignItems:flex-start(默認值)| flex-end | center | stretch
2.alignSelf
用來設置單獨的伸縮項目在交叉軸上的對齊方式,會覆蓋默認的對齊方式,其語法爲:alignSelf:auto | flex-start | flex-end | center | stretch(伸縮項目在交叉軸方向佔滿伸縮容器,若是交叉軸爲垂直方向的話,只有在不設置高度的狀況下才能看到效果)
3.flex
是flex-grow flex-shrink flex-basis這三個屬性的縮寫,其語法爲:flex:none | flex-grow flex-shrink flex-basis,其中第二個和第三個參數爲可選參數,默認值爲:0 1 auto
4.flexDirection
指定主軸的方向 flex-direction:row| row-reverse | column(默認值)| column-reverse
5.flexWrap
6.justifyContent
若是你想學習關於flexbox更多的內容:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
以上這些都是react-native入門必備知識點,在計劃學習react-native以前,趕忙充個電吧。