# 代碼 項目剛創建的時候,只有一個js文件,index.android.js,我們將其簡化一下,代碼如下: import React, { AppRegistry, Component, Text} from 'react-native'; class Note extends Component
# 代碼
項目剛創建的時候,只有一個js文件,index.android.js,我們將其簡化一下,代碼如下:
import React, {
AppRegistry,
Component,
Text} from 'react-native';
class Note extends Component{
render(){
return (
<Text>
寫筆記
</Text>
);
};
};
AppRegistry.registerComponent('note', () => Note);
# React Native程式執行過程
1. index.android.js是入口文件,從這裡開始執行。
2. 由於React是組件化的,我們首先要創建一個根組件,這裡是Note
3. 我們需要註冊根組件
4. 程式啟動後,首先顯示根組件,這裡簡單的在屏幕左上方顯示"寫筆記"
# Es2015的模塊系統
import React, {
AppRegistry,
Component,
Text} from 'react-native';
這部分的作用,是導入react-native包的一些功能,這裡React是預設導入,只能有一個,其它大括弧里的,可能是
類、函數和變數,只要我們用到了,這裡就要預先導入。
我們要在js文件里調用其它模塊提供的功能,就必須先import它們。
# React的組件概念
class Note extends Component{
這是創建一個組件,繼承自Component,實現render函數。
我們創建了這個組件,今後在jsx中就可以用<Note> </Note>這類方式使用該組件,和使用react native封裝的
<Text>組件沒什麼不同,這就是為何說React是組件化的原因。
簡單的描述下React概念:React的第一個核心概念是虛擬Dom,無論何種平臺該虛擬Dom都抽象了界面的層次結構、
每個組件的屬性和狀態。狀態發生變化時,React比較與前面狀態的差異,然後僅僅Render需要修改的部分,不需全部重
繪。React是Web技術,已經將React-Dom分離出來,後者是將html的標簽組件化、Render,而反過來,React Native
則僅封裝android和ios相關的組件,因此React的核心架構,再實現了一套組件的Render後,就能工作在移動平臺。
同樣的道理,若我們在win32平臺,使用window api實現組件的render,這種技術同樣可以用於桌面開發,且是原生的、使用
js的windows應用。目前已經有第三方實現了mac上的Render.
# JSX
這個組件只實現了Render函數,就能夠正常工作,該函數的作用是,將自己呈現出來
函數體返回的內容,是jsx語法,這種語法最簡單的形式:
<Text>
寫筆記
</Text>
為什麼是簡化的寫法呢?因為React原始的寫法是這樣的
render(){
return (
React.createElement('Text', null,'寫筆記')
)}
createElement最後一個參數,還可能就緒嵌套調用createElement,這樣代碼十分紊亂。
因此facebook提供了jsx語
法,在運行前,將其轉換成createElement這樣的形式。
# 註冊根組件:
AppRegistry.registerComponent('note', () => Note);
React Native提供AppRegistry,用於註冊第一個呈現的組件,稱為根組件。
其參數中,第一個是名字,第二個()=>Note是Es2015的雙箭頭函數,類似其它語言中的lambda函數,
等同於func(return Note);如果有一個或多個參數,在括弧中處理.
Note,是一個類,這裡的寫法實際上創建了Note類的一個實例,調用了Note類的構造方法
# 分離出單獨的Note組件:
一般項目,不會只有一個源文件。
我們創建src目錄,在其中創建一個note.js的文件,然後將這裡的組件移植過去。加上必要的引用,為組件類
加上預設導出:export default.
在index.android.js里刪掉該組件相關的代碼和導入,增加對'.\src\note'的導入。