【Hybrid開(kāi)發(fā)高級(jí)系列】ReactNative(七) —— RN組件專題

1 IOS組件

1.1 iOS活動(dòng)指示器

1.1.1 Props

animating?bool型 顯示指示器(true,默認(rèn)的)還是隱藏它(false)姨谷;

color字符串型;

Spinner的前景顏色(默認(rèn)為灰色);

size枚舉型(“小”唇辨,“大”)指示器的大小。小的高度為20锉罐,大的高度為36帆竹。

1.2 iOS日期選擇器

????????使用DatePickerIOS來(lái)在iOS上呈現(xiàn)一個(gè)日期/時(shí)間選擇器(selector)。這是一個(gè)控制組件脓规,所以為了組件更 新栽连,你必須鉤在onDateChange回調(diào)中,并更新date支持侨舆,否則用戶的變化將立即恢復(fù)以反映props.date秒紧。

1.2.1 Props

????date日期型??

????????當(dāng)前選中的日期。

????maximumDate日期型

????????最大的日期挨下。限制可能的日期/時(shí)間值的范圍熔恢。

????minimumDate日期型

????????最小的日期。限制了可能的日期/時(shí)間值的范圍臭笆。

????minuteInterval枚舉型(1,2,3,4,5,6,10,12,15,20,30)

????????可選擇的分鐘的間隔叙淌。

????mode枚舉型(“date”,“time”,“datetime”)

????????日期選擇器模式。

????onDateChange函數(shù)型

????????日期變更處理程序愁铺。

????????當(dāng)用戶更改了UI的日期或時(shí)間時(shí)鹰霍,它就會(huì)被調(diào)用。第一個(gè)也是唯一一個(gè)參數(shù)是一個(gè)Date對(duì)象茵乱,代表了新的日期和時(shí)間衅谷。

? ? timeZoneOffsetInMinutes數(shù)字型

????????在幾分鐘內(nèi)時(shí)區(qū)偏移。

????????默認(rèn)情況下似将,日期選擇器將使用設(shè)備的時(shí)區(qū)获黔。有了這個(gè)參數(shù),才有可能迫使某個(gè)時(shí)區(qū)偏移在验。例如玷氏,為了顯示太平 洋的標(biāo)準(zhǔn)時(shí)間,傳遞-7 * 60腋舌。

1.3 iOS導(dǎo)航器

????????iOS導(dǎo)航器包裝了UIKit導(dǎo)航盏触,并且允許你添加跨應(yīng)用程序的back-swipe功能。

1.3.1 路線

????????路線是用于描述導(dǎo)航器每個(gè)頁(yè)面的一個(gè)對(duì)象块饺。第一個(gè)提供給NavigatorIOS的路線是initialRoute :

render: function() {

? return (

????<NavigatorIOS

????? initialRoute={{

??????? component:MyView,

??????? title: 'MyView Title',

??????? passProps: {myProp: 'foo' },

? ? ? }}

????/>

? );

},

????????現(xiàn)在將由導(dǎo)航器呈現(xiàn)MyView赞辩。它將在route道具,導(dǎo)航器及所有的passProps指定的道具中接受一個(gè)路線對(duì)象授艰。

????????路線完整的定義請(qǐng)看initialRoute propType辨嗽。

1.3.2 導(dǎo)航器

????????Navigator是視圖能夠調(diào)用的導(dǎo)航函數(shù)的一個(gè)對(duì)象。它作為一個(gè)道具會(huì)被傳遞給任何由NavigatorIOS呈現(xiàn)的組件淮腾。

var MyView = React.createClass({

? ? _handleBackButtonPress: function() {

? ? ????this.props.navigator.pop();

? ? },

? ? _handleNextButtonPress: function() {

???????this.props.navigator.push(nextRoute);

????},

????...?

});

????????一個(gè)導(dǎo)航對(duì)象包含以下功能:

????? push(route)

????——導(dǎo)航到一個(gè)新的路線

????? pop()

????——返回一個(gè)頁(yè)面

????? popN(n)

????——一次返回N頁(yè)糟需。當(dāng)N=1時(shí)屉佳,該行為相當(dāng)于pop()

????? replace(route)

????——取代當(dāng)前頁(yè)面的路線,并立即為新路線加載視圖

????? replacePrevious(route)

????——取代前一頁(yè)的路線/視圖

????? replacePreviousAndPop(route)

????——取代了以前的路線/視圖并轉(zhuǎn)換回去

????? resetTo(route)

????——取代頂級(jí)的項(xiàng)目并popToTop

????? popToRoute(route)

????——為特定的路線對(duì)象回到項(xiàng)目

????? popToTop()

????——回到頂級(jí)項(xiàng)目


????????導(dǎo)航功能在NavigatorIOS組件中也是可用的:

?var MyView =React.createClass({

? ? ?_handleNavigationRequest: function() {

? ? ?????this.refs.nav.push(otherRoute);

? ? ?},

? ? ?render: () => (

????????<NavigatorIOS ref="nav"

? ? ? ? ? ? initialRoute={...}

? ? ? ? />

????),

});

1.3.3 Props

????????initialRoute{組件:函數(shù)型洲押,標(biāo)題:字符串型武花,passProps:對(duì)象型,backButtonTitle:字符串型杈帐,rightButt onTitle:字符串型体箕,onRightButtonPress:函數(shù)型,wrapperStyle:[對(duì)象型Object]}

????????NavigatorIOS使用“路線”對(duì)象來(lái)識(shí)別子視圖挑童,道具干旁,及導(dǎo)航欄的配置∨阢澹“push”和所有其他的導(dǎo)航操作預(yù)計(jì)路 線是這樣的:

????itemWrapperStyle View#style

????????默認(rèn)的包為navigator中的組件設(shè)置樣式争群。一個(gè)常見(jiàn)的用例是為每一頁(yè)設(shè)置backgroundColor

????tintColor字符串型在導(dǎo)航欄中的按鈕使用的顏色

1.4 iOS選擇器

1.4.1 Props

onValueChange 函數(shù)型

selectedValue 任意類型

1.5 iOS滑塊

1.5.1 屬性

????maximumValue 數(shù)值型

????????滑動(dòng)塊初始化最大值。默認(rèn)值是1大年。

????minimumValue數(shù)值型

????????滑動(dòng)塊初始化最小值换薄。默認(rèn)值是0。

????onSlidingComplete函數(shù)

????????當(dāng)用戶已經(jīng)完成改變它的值后翔试,調(diào)用回調(diào)函數(shù)(例如轻要,當(dāng)滑動(dòng)塊被釋放)

????onValueChange函數(shù)

????????當(dāng)用戶拖動(dòng)滑動(dòng)塊時(shí),連續(xù)不斷的調(diào)用回調(diào)函數(shù)

1.5.2 styleView#style

????????用于對(duì)Slider的設(shè)計(jì)與布局垦缅。未獲取更多的信息冲泥,請(qǐng)查看StyleSheet.js和ViewStylePropTypes.js

????value數(shù)值型

????????初始化滑動(dòng)塊的值。該值應(yīng)該是介于最大值和最小值之間的壁涎,最大值默認(rèn)為1凡恍,最小值默認(rèn)為0。默認(rèn)值為0怔球。 這不是一個(gè)控制組件嚼酝,比如說(shuō),如果你不更新組件的值竟坛,那么它將不會(huì)被重置成它的初始值闽巩。

1.6 iOS開(kāi)關(guān)

????????使用SwitchIOS在iOS上呈現(xiàn)出布爾型的輸入。這是一個(gè)控件組件担汤,所以為了更新組件类溢,你必須使用Change回調(diào)并且更新值value女嘲。否則的話用戶的改變會(huì)被立即反映到props.value骤宣,這是一個(gè)真理温数。

1.6.1 屬性

????disabled布爾型

????????如果值為真,那么用戶將不能切換開(kāi)關(guān)驾荣。默認(rèn)值為假外构。

????onTintColor字符串型

????????當(dāng)開(kāi)關(guān)打開(kāi)時(shí)候的背景顏色。

????onValueChange函數(shù)

????????當(dāng)用戶切換開(kāi)關(guān)時(shí)播掷,調(diào)用回調(diào)函數(shù)审编。

????thumbTintColor字符串型

????????開(kāi)關(guān)按鈕的背景顏色。

????tintColor字符串型

????????當(dāng)開(kāi)關(guān)關(guān)閉后的背景顏色歧匈。

????value布爾型

????????開(kāi)關(guān)的值垒酬,如果為真,開(kāi)關(guān)會(huì)打開(kāi)件炉。默認(rèn)值為假勘究。

1.7 iOS選項(xiàng)卡

1.7.1 屬性

1.7.2 styleView#style


1.8 TabBarIOS.Item

????badge

????????位于圖標(biāo)右上角的小的紅色的泡沫。


????icon Image.propTypes.source

????????標(biāo)記的自動(dòng)以圖標(biāo)斟冕。當(dāng)定義了系統(tǒng)圖標(biāo)時(shí)口糕,它將被忽略。


????onPress函數(shù)

????????當(dāng)標(biāo)記被選中時(shí)磕蛇,該函數(shù)回調(diào)景描,你應(yīng)該改變組件的狀態(tài)來(lái)設(shè)置selected={true}。


????selected布爾值

????????它指定了孩子是否可見(jiàn)秀撇。如果你看到了一個(gè)空白的內(nèi)容超棺,你很有可能是忘記添加選中項(xiàng)了。


????selectedIcon Image.propTypes.source

????????當(dāng)標(biāo)記被選中時(shí)呵燕,自定義的圖標(biāo)棠绘。當(dāng)定義了系統(tǒng)圖標(biāo)時(shí),它會(huì)被忽略再扭。如果為空氧苍,那么圖標(biāo)會(huì)呈現(xiàn)藍(lán)色。

1.8.1 styleView#style

????????React樣式對(duì)象泛范。

systemIcon枚舉('bookmarks' 'contacts' 'downloads'候引,'favorites','featured'敦跌,'history'澄干,'more','most-recent'柠傍,'most-viewed'麸俘,'recents','search'惧笛,'top-rated')

????????項(xiàng)目有一些預(yù)定義的系統(tǒng)圖標(biāo)从媚。請(qǐng)注意如果你正在使用它們,標(biāo)題和選中的圖標(biāo)將被系統(tǒng)圖標(biāo)覆蓋患整。


????title字符串

????????出現(xiàn)在圖標(biāo)下的文本拜效。當(dāng)定義了系統(tǒng)圖標(biāo)時(shí)喷众,它會(huì)被忽略。

1.9 嵌套文本

????????在iOS里紧憾,顯示格式化文本的方式是使用NSAttributedString :你可以為你想要顯示和注釋的文本劃定一些特 定的格式范圍到千。實(shí)際上,這是非常無(wú)聊的赴穗。對(duì)于React Native憔四,我們決定使用Web模式,在這里我們可以利用 嵌套文本來(lái)達(dá)到同樣的效果般眉。

<Text style={{fontWeight: 'bold'}} >

? ?I am bold

????<Text style={{color: 'red'}}>??

????and red

????</Text>

</Text>

????????在幕后了赵,這將會(huì)被轉(zhuǎn)換成一個(gè)完全的包含以下信息的NSAttributedString

???? "I am bold and red"

???? 0-9: bold

???? 9-17: bold, red

1.10 iOS警告

????????利用一個(gè)特定的標(biāo)題和消息來(lái)啟動(dòng)一個(gè)警告對(duì)話框。

????????提供一個(gè)可選按鈕的列表甸赃。點(diǎn)擊任何按鈕觸發(fā)各自的按下回調(diào)動(dòng)作柿汛,并且忽略警告。在默認(rèn)情況下埠对,只有一個(gè)按 鈕是“OK”按鈕苛茂。列表中最后一個(gè)按鈕被視為“主”按鈕,它被用粗體顯示出來(lái)了鸠窗。

AlertIOS.alert(

? 'Foo Title',

? 'My Alert Msg',

? [

??? {text: 'Foo',onPress: () => console.log('Foo Pressed!')},

??? {text: 'Bar',onPress: () => console.log('Bar Pressed!')},

? ]

)}

1.10.1 方法

static alert(title: string, message?: string, buttons?:Array<{ text: ?string; onPress: ?Function; }>)

2 Android組件

2.1 DrawerLayoutAndroid

????????React組件封裝平臺(tái)DrawerLayout(僅適用于Android)妓羊。Drawer(通常用于導(dǎo)航)呈現(xiàn)renderNavigationView渲染導(dǎo)航視圖和直接子級(jí),是呈現(xiàn)(您的內(nèi)容)的主要視圖稍计。導(dǎo)航視圖是最初在屏幕上不可見(jiàn)的躁绸,但可以從由drawerPosition指定的窗口的側(cè)面拉出,其寬度可通過(guò)drawerWidth設(shè)置臣嚣。

2.2 ProgressBarAndroid

????????React組建包裹了只是Android部分的ProgressBar净刮。這個(gè)組件是被用來(lái)提示這個(gè)應(yīng)用正在加載或者在應(yīng)用里 面有一些操作。

例子:

render: function() {

? var progressBar =

????<View style={styles.container}>

? ? ????<ProgressBar styleAttr="Inverse" />

????</View>;

? return (

????<MyLoadingComponent componentView={componentView}

?????????loadingView={progressBar}

?????????style={styles.loadingComponent}

????? /> );

},

2.2.1 屬性

????????styleAttr樣式屬性 進(jìn)度條的樣式硅则,包括:

????? Horizontal

????? Small

????? Large

????? Inverse????

????? SmallInverse

????? LargeInverse

????????testID字符串 在端對(duì)端測(cè)試?yán)锩姹挥脕?lái)定位這個(gè)視圖淹父。

2.3 SwitchAndroid

????????標(biāo)準(zhǔn)的Android雙態(tài)切換組件屬性

disable bool

????????如果為true,則該組件不能進(jìn)行交互怎虫。onValueChange function當(dāng)值發(fā)生變化時(shí)調(diào)用新的值暑认。

testID string

????????用于在端到端測(cè)試中查找此視圖。

value bool

????????開(kāi)關(guān)的布爾值大审。

2.4 ToolbarAndroid

????????React組件蘸际,包裝了Android Toolbar小工具。工具欄可以顯示一個(gè)標(biāo)志徒扶,導(dǎo)航圖標(biāo)(如漢堡包菜單)粮彤,標(biāo)題 和副標(biāo)題和操作列表。標(biāo)題和子標(biāo)題被擴(kuò)展這樣以來(lái)標(biāo)志和導(dǎo)航圖標(biāo)顯示在左邊,標(biāo)題和副標(biāo)題在中間并且操作 在右邊导坟。

????????如果工具欄具有唯一子級(jí)屿良,它將顯示在標(biāo)題和操作之間。

例子:

render: function() {

? return (

????<ToolbarAndroid logo={require('image!app_logo')} title="AwesomeApp"

?????????actions={[{title: 'Settings', icon: require('image!icon_settings') show: 'always'}]}

????? ????onActionSelected={this.onActionSelected}/>

? )?

},

onActionSelected: function(position) {

? if (position === 0){?

????// index of 'Settings'

? }

}

2.4.1 屬性

actions [{title: string, icon: Image.propTypes.source, show:enum('always', 'ifRoom', 'never'), sho wWithText: bool}]

????????將工具欄上的可能動(dòng)作設(shè)置為動(dòng)作菜單的一部分惫周。這些都顯示為圖標(biāo)或小部件右側(cè)的文本尘惧。如果不適合,它們將 被放置在一個(gè)'溢出'菜單闯两。

????????此屬性需要一個(gè)對(duì)象數(shù)組褥伴,其中每個(gè)對(duì)象具有以下鍵:

????? title :必要的,這個(gè)操作的標(biāo)題

????? icon :這個(gè)操作的圖標(biāo)谅将,例如:require('image!some_icon')

????? show :當(dāng)把這個(gè)操作顯示為一個(gè)圖標(biāo)或隱藏在溢出菜單中時(shí):always , ifRoom或never

????? showWithText :布爾值漾狼,是否顯示圖標(biāo)旁邊的文本


????logo Image.propTypes.source

????????設(shè)置工具欄的標(biāo)志。

????navIcon Image.propTypes.source

????????設(shè)置導(dǎo)航圖標(biāo)饥臂。

????onActionSelected function

????????被選中時(shí)調(diào)用回調(diào)函數(shù)逊躁。傳遞到回調(diào)的唯一參數(shù)是操作數(shù)組中的位置。

????onIconClicked function

????????在選定圖標(biāo)時(shí)調(diào)用隅熙。

????subtitle string

????????設(shè)置工具欄副標(biāo)題稽煤。

????subtitleColor string

????????設(shè)置工具欄副標(biāo)題的顏色。

????testID string

????????用于在端到端測(cè)試中查找此視圖囚戚。

????title string

????????設(shè)置工具欄標(biāo)題酵熙。

????titleColor string

????????設(shè)置工具欄副標(biāo)題的顏色。

2.5 ToastAndroid

????????它揭示了如何將本地ToastAndroid模塊作為一個(gè)JS模塊驰坊。它有一個(gè)名為showText的函數(shù)匾二,其擁有的參數(shù)如下所示:

????1.字符串消息:將文本傳遞給toast的字符串

????2. int持續(xù)期:toast的持續(xù)期∪剑可能是ToastAndroid.SHORT或ToastAndroid.LONG


方法

static show(message: string, duration: number)

性質(zhì)

SHORT: MemberExpression

LONG: MemberExpression

3 公共組件

3.1 列表視圖

????????列表視圖——為變化的數(shù)據(jù)列表的垂直滾動(dòng)的高效顯示而設(shè)計(jì)的一個(gè)核心組件察藐。最小的API是創(chuàng)建一個(gè)ListView.DataSource,用一個(gè)簡(jiǎn)單的數(shù)組數(shù)據(jù)的blob填充舟扎,并用那個(gè)數(shù)據(jù)源實(shí)例化一個(gè)ListView組件和一個(gè)renderRow回調(diào)分飞,它會(huì)從數(shù)組數(shù)據(jù)中帶走一個(gè)blob并返回一個(gè)可渲染的組件。

????????最小的例子:

getInitialState: function() {

? var ds = newListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});

? return {

??? dataSource: ds.cloneWithRows(['row 1', 'row 2']),

? };

},

render: function() {

? return (

????<ListView dataSource={this.state.dataSource}

????? renderRow={(rowData) => <Text>{rowData}}</Text>

??? />

); },

????????列表視圖還支持更高級(jí)的功能睹限,包括帶有sticky頁(yè)眉的部分譬猫,頁(yè)眉和頁(yè)腳的支持,回調(diào)到可用數(shù)據(jù)的最后()和設(shè)備窗口變化中可見(jiàn)的行集(onChangeVisibleRows)羡疗,以及一些性能優(yōu)化删窒。

????????當(dāng)動(dòng)態(tài)加載一些可能非常大(或概念上無(wú)限大的)數(shù)據(jù)集時(shí),為了讓列表視圖滾送的順暢顺囊,有一些性能操作設(shè)計(jì):

????? 只有重新呈現(xiàn)改變行——提供給數(shù)據(jù)源的hasRowChanged函數(shù)告訴列表視圖是否需要重新呈現(xiàn)一行肌索,因?yàn)樵磾?shù)據(jù)發(fā)生了變化——更多細(xì)節(jié)請(qǐng)看ListViewDataSource。

????? 行限速呈現(xiàn)——默認(rèn)情況下,每次事件循環(huán)時(shí)诚亚,只顯示一行(可用pageSize道具定制)晕换。這將工作分解為小塊,在呈現(xiàn)行時(shí)站宗,減少框架下降的機(jī)會(huì)闸准。

3.1.1 Props

ScrollView props...

dataSource 列表視圖數(shù)據(jù)源


initialListSize 數(shù)字型

????????多少行呈現(xiàn)在初始組件裝置中。使用這個(gè)來(lái)實(shí)現(xiàn)梢灭,這樣第一個(gè)屏幕需要的數(shù)據(jù)就會(huì)一次出現(xiàn)夷家,而不是在多個(gè)框架的過(guò)程中出現(xiàn)。


onChangeVisibleRows函數(shù)型

????????(visibleRows, changedRows) => void 當(dāng)可見(jiàn)的行集改變時(shí)調(diào)用敏释。visibleRows為所有可見(jiàn)的行映射{sectionID: {rowID: true }}库快,changedRows為已經(jīng)改變了它們可見(jiàn)性的行映射{sectionID: {rowID: true |false }},true表明行可見(jiàn)钥顽,而false表明行已經(jīng)從視圖中被刪除了义屏。


onEndReached函數(shù)型

????????當(dāng)所有行已經(jīng)呈現(xiàn)并且列表被滾動(dòng)到了onEndReachedThreshold的底部時(shí)被調(diào)用。提供了native滾動(dòng)事件蜂大。


onEndReachedThreshold 數(shù)字型


onEndReached 像素的閾值闽铐。


pageSize數(shù)字型

????????每次事件循環(huán)顯示的行的數(shù)量。


removeClippedSubviews 布爾型

????????為提高大型列表滾動(dòng)性能的實(shí)驗(yàn)性能優(yōu)化奶浦,與溢出一起使用:“隱藏”在行容器中兄墅。使用時(shí)自己承擔(dān)風(fēng)險(xiǎn)。


renderFooter函數(shù)型

????????() => renderable 頁(yè)眉和頁(yè)腳在每個(gè)呈現(xiàn)過(guò)程中都會(huì)出現(xiàn)(如果提供了這些道具)澳叉。如果重新呈現(xiàn)它們耗費(fèi)很大隙咸,那就把它們包在StaticContainer或其他適當(dāng)?shù)臋C(jī)制中。在每一個(gè)呈現(xiàn)過(guò)程中耳高,頁(yè)腳始終是在列表的底部扎瓶,頁(yè)眉始終在列表的頂 部。


renderHeader函數(shù)型renderRow函數(shù)型

????????(rowData, sectionID, rowID) => renderable需要從數(shù)據(jù)源和它的id取走一個(gè)數(shù)據(jù)條目泌枪,并返回一個(gè)可渲染 的作為行呈現(xiàn)的組件概荷。默認(rèn)的情況下,數(shù)據(jù)正是被放入了數(shù)據(jù)源的東西碌燕,但也可以提供自定義的提取器误证。


renderSectionHeader函數(shù)型

????????(sectionData, sectionID) => renderable 如果提供了該函數(shù),那么本節(jié)的sticky頁(yè)眉就會(huì)呈現(xiàn)修壕。Sticky行為意味著它將帶著本節(jié)頂部的內(nèi)容滾動(dòng)愈捅,直到 它到達(dá)屏幕的頂端,此時(shí)它會(huì)停在屏幕頂部慈鸠,直到被下一節(jié)的頁(yè)眉推掉蓝谨。


scrollRenderAheadDistance數(shù)字型

????????在它們以像素的形式出現(xiàn)在屏幕上之前,要多早就開(kāi)始呈現(xiàn)行。

3.2 Map視圖

3.2.1 Props

????????legalLabelInsets {頂部:數(shù)字型;左部:數(shù)字型;底部:數(shù)字型;右部:數(shù)字型}

????????為map嵌入合法的標(biāo)簽譬巫,最初是在map的左下角咖楣。更多信息請(qǐng)看EdgeInsetsPropType.js。


????maxDelta數(shù)字型

????????能夠顯示的區(qū)域的最大尺寸芦昔。


????minDelta數(shù)字型

????????能夠顯示的區(qū)域的最小尺寸诱贿。


????onRegionChange函數(shù)型

????????當(dāng)用戶拖動(dòng)map時(shí),會(huì)不斷地調(diào)用回調(diào)函數(shù)咕缎。


????onRegionChangeComplete函數(shù)型

????????當(dāng)用戶完成移動(dòng)map時(shí)珠十,調(diào)用一次回調(diào)函數(shù)。


????pitchEnabled布爾型

????????當(dāng)這個(gè)屬性設(shè)置為true凭豪,且有效的相機(jī)與map相關(guān)聯(lián)焙蹭,那么相機(jī)的螺旋角用于傾斜map的平面。當(dāng)這個(gè)屬性 設(shè)置為false時(shí)墅诡,相機(jī)的螺旋角被忽略壳嚎,并且map上總是顯示為好像用戶直接向下看桐智。


????region {緯度:數(shù)字型末早,經(jīng)度:數(shù)字型,latitudeDelta:數(shù)字型说庭,longitudeDelta:數(shù)字型}

????????該地區(qū)會(huì)被map顯示出來(lái)然磷。由中心坐標(biāo)和坐標(biāo)跨度定義的區(qū)域顯示出來(lái)。


????rotateEnabled布爾型

????????當(dāng)這個(gè)屬性設(shè)置為true刊驴,且有效的相機(jī)與map相關(guān)聯(lián)姿搜,那么相機(jī)的航向角用于圍繞map中心點(diǎn)旋轉(zhuǎn)map平 面。當(dāng)該屬性設(shè)置為false時(shí)捆憎,相機(jī)的航向角被忽略舅柜,map總是定向的,這樣真正的北方就會(huì)位于map視圖的 頂部躲惰。


????scrollEnabled布爾型

????????如果是false致份,用戶無(wú)法更改map顯示的區(qū)域。默認(rèn)值是true础拨。


????showsUserLocation布爾型

????????如果是true氮块,應(yīng)用程序會(huì)請(qǐng)求用戶的位置并關(guān)注它。默認(rèn)值是false诡宗。

????????注意:為了獲取地理位置滔蝉,你需要添加把NSLocationWhenInUseUsageDescription鍵添加到info.plist,否則 就會(huì)失敗!


????style View#style

????????用于MapView的樣式設(shè)置和布局塔沃。更多信息請(qǐng)看StyleSheet.js和ViewStylePropTypes.js蝠引。


????zoomEnabled布爾型

????????如果是false,用戶無(wú)法縮小/放大map。默認(rèn)值是true螃概。

3.3 導(dǎo)航器

????????在你的應(yīng)用程序中使用Navigator來(lái)在不同場(chǎng)景之間過(guò)渡边坤。為了實(shí)現(xiàn)這一功能,為導(dǎo)航器提供了路由對(duì)象來(lái)識(shí) 別每一個(gè)場(chǎng)景谅年,還提供了一個(gè)renderScene函數(shù)茧痒,導(dǎo)航器可以用它來(lái)為給定的路線渲染場(chǎng)景。

????????為了改變場(chǎng)景的動(dòng)畫或動(dòng)作屬性融蹂,提供了一個(gè)configureScene道具來(lái)為給定的路由配置對(duì)象旺订。看到導(dǎo)航器超燃。默 認(rèn)動(dòng)畫及更多的關(guān)于場(chǎng)景配置選項(xiàng)的信息区拳,請(qǐng)看Navigator.SceneConfigs。

3.3.1 基本的使用

<Navigator

???initialRoute = {{name: 'My First Scene', index: 0}}

???renderScene={(route, navigator) =>

????????<MySceneComponent

???????????name={route.name}

??????????? onForward={()=> {

? ? ? ? ? ? ? ? var nextIndex = route.index + 1;

? ? ? ? ? ? ? ? navigator.push({

??????????? ????????name: 'Scene ' + nextIndex,

??????????? ????????index: nextIndex,

? ? ? ? ? ? ? ? });

??????? ????}}

??????? ????onBack={()=> {

? ? ? ? ? ? ? ? if(route.index > 0) {

???????????????????navigator.pop();

????????????????}

????????????}}

????????/> }

/>

3.3.2 導(dǎo)航方法

????????Navigator有兩種方式進(jìn)行導(dǎo)航意乓。如果你有一個(gè)參考元素樱调,你可以調(diào)用一些方法來(lái)觸發(fā)導(dǎo)航:

????? jumpBack()

????????——在不需要卸載當(dāng)前場(chǎng)景的情況下向后跳

????? jumpForward()

????????——向前跳轉(zhuǎn)到路線堆棧中的下一個(gè)場(chǎng)景

????? jumpTo(route)?

????????——過(guò)渡到一個(gè)現(xiàn)有的沒(méi)有被卸載的場(chǎng)景

????? push(route)

????????——導(dǎo)航到一個(gè)新的場(chǎng)景,擠壓任何你能夠jumpForward的場(chǎng)景

????? pop()

????????——回歸并卸載當(dāng)前場(chǎng)景

????? replace(route)

????????——用一個(gè)新路線替換當(dāng)前場(chǎng)景

????? replaceAtIndex(route, index)

????????——取代一個(gè)由索引指定的場(chǎng)景

????? replacePrevious(route)

????????——取代之前的場(chǎng)景

????? immediatelyResetRouteStack(routeStack)

????????——用一組路線重置每個(gè)場(chǎng)景

????? popToRoute(route)

????????——彈出一個(gè)由它的路線指定的特定的場(chǎng)景届良。這之后所有的場(chǎng)景將被卸載

????? popToTop()

????????——彈出堆棧中的第一個(gè)場(chǎng)景笆凌,卸載其他場(chǎng)景

3.3.3 導(dǎo)航器對(duì)象

????????通過(guò)renderScene函數(shù)navigator對(duì)象對(duì)場(chǎng)景是可用的。對(duì)象有所有的導(dǎo)航方法士葫,以及一些實(shí)用程序:

????? parentNavigator

????????——父導(dǎo)航對(duì)象的參考乞而,在props.navigator中被傳遞

????? onWillFocus

????????——用來(lái)向父導(dǎo)航器傳遞一個(gè)導(dǎo)航焦點(diǎn)事件

????? onDidFocus

????????——用來(lái)向父導(dǎo)航器傳遞一個(gè)導(dǎo)航焦點(diǎn)事件

3.3.4 Props

????configureScene函數(shù)型?

????????可選功能,允許配置場(chǎng)景動(dòng)畫和手勢(shì)慢显。將由路線調(diào)用爪模,且應(yīng)該返回一個(gè)場(chǎng)景配置對(duì)象

(route) => Navigator.SceneConfigs.FloatFromRight


initialRoute對(duì)象型

????????提供一個(gè)單一的“路線”來(lái)開(kāi)始。路線是一個(gè)任意的對(duì)象荚藻,導(dǎo)航器將使用它在場(chǎng)景呈現(xiàn)之前確定每個(gè)場(chǎng)景屋灌。initialRoute或initialRouteStack是必需的。


initialRouteStack [對(duì)象型]

????????提供一組路線來(lái)呈現(xiàn)最初的場(chǎng)景应狱。如果沒(méi)有提供initialRoute共郭,那么該道具就會(huì)被需求。


navigationBar節(jié)點(diǎn)型

????????以可選的方式提供一個(gè)能夠存留在場(chǎng)景之間轉(zhuǎn)換的導(dǎo)航欄


navigator對(duì)象型

????????以可選的方式從父導(dǎo)航器提供navigator對(duì)象

onDidFocus函數(shù)型

????????在場(chǎng)景過(guò)渡完成后或在最初安裝后該函數(shù)會(huì)被每個(gè)場(chǎng)景的新路線調(diào)用侦香。這將覆蓋在this.props.navigator的onD idFocus處理程序上落塑。


onItemRef函數(shù)型

????????當(dāng)場(chǎng)景參考發(fā)生變化時(shí),該函數(shù)會(huì)被調(diào)用(ref罐韩,indexInStack)


onWillFocus函數(shù)型

????????將在安裝中和每個(gè)導(dǎo)航轉(zhuǎn)換之前發(fā)射目標(biāo)路線憾赁,覆蓋this.props.navigator中的處理程序。這將覆蓋this.prop s.navigator中的onDidFocus處理程序


renderScene函數(shù)型

????????對(duì)于一個(gè)給定的路線哪一個(gè)場(chǎng)景會(huì)出現(xiàn)需要該函數(shù)散吵。將由路線和navigator對(duì)象調(diào)用龙考。

?(route, navigator)=> <MySceneComponent title={route.title} />


sceneStyle View#style

????????設(shè)置樣式蟆肆,以應(yīng)用于每個(gè)場(chǎng)景的容器中。

3.4 滾動(dòng)視圖

????????組件封裝了滾動(dòng)視圖平臺(tái)晦款,同時(shí)提供了與鎖定“應(yīng)答”系統(tǒng)的觸摸的集成炎功。尚不支持其他來(lái)自阻止?jié)L動(dòng)視圖成為響應(yīng)者的包含的響應(yīng)。

3.4.1 Props

alwaysBounceHorizontal 布爾型

????????當(dāng)為真時(shí)缓溅,滾動(dòng)視圖到達(dá)內(nèi)容底部時(shí)蛇损,水平反彈,即使該內(nèi)容小于滾動(dòng)視圖坛怪。當(dāng)horizontal={true}時(shí)淤齐,默認(rèn)值 為true,否則袜匿,默認(rèn)值為false更啄。


alwaysBounceVertical 布爾型

????????當(dāng)為真時(shí),滾動(dòng)視圖到達(dá)內(nèi)容底部時(shí)居灯,垂直反彈祭务,即使該內(nèi)容小于滾動(dòng)視圖。當(dāng)horizontal={true}時(shí)怪嫌,默認(rèn)值 為false义锥,否則,默認(rèn)值為true喇勋。


automaticallyAdjustContentInsets 布爾型


bounces 布爾型

????????當(dāng)為真時(shí)缨该,當(dāng)滾動(dòng)視圖到達(dá)內(nèi)容底部時(shí)偎行,反彈川背,如果內(nèi)容比滾動(dòng)視圖是大,那么滾動(dòng)視圖沿著軸滾動(dòng)方向反 彈蛤袒。當(dāng)為假時(shí)熄云,禁用所有反彈,即使alwaysBounce *道具為真妙真。默認(rèn)值為true缴允。


centerContent bool布爾型

????????當(dāng)為真時(shí),當(dāng)內(nèi)容小于滾動(dòng)視圖邊界時(shí)珍德,滾動(dòng)視圖自動(dòng)的集中內(nèi)容;當(dāng)內(nèi)容大于滾動(dòng)視圖時(shí),該屬性沒(méi)有任何影 響练般。默認(rèn)值是false。


contentContainerStyle StyleSheetPropType(ViewStylePropTypes)

????????這些樣式將應(yīng)用到滾動(dòng)視圖內(nèi)容容器中锈候,內(nèi)容容器包裝了所有的子視圖薄料。例如:


return (<ScrollView?

????contentContainerStyle={styles.contentContainer}>?

????</ScrollView>??

);?

...


contentInset {頂部:數(shù)字型,左部:數(shù)字型泵琳,底部:數(shù)字型摄职,右部:數(shù)字型}


contentOffset PointPropType


decelerationRate數(shù)字型

????????一個(gè)浮點(diǎn)數(shù)誊役,決定了在用戶移開(kāi)手指后,滾動(dòng)視圖減速有多快谷市。合理的選擇包括——正常:0.998(默認(rèn))——快 速:0.9


horizontal布爾型

????????當(dāng)為真時(shí)蛔垢,滾動(dòng)視圖的子視圖水平排列為一行,而不是豎直排列為一列迫悠。默認(rèn)值是false鹏漆。


keyboardDismissMode枚舉型(“none”,“interactive”创泄,“onDrag”)

????????確定鍵盤在響應(yīng)一個(gè)拖動(dòng)時(shí)是否被摒棄甫男。

????——“none”(默認(rèn)),拖動(dòng)沒(méi)有摒棄鍵盤验烧。

????——“onDrag”板驳,當(dāng)拖動(dòng)開(kāi) 始時(shí)鍵盤就被摒棄了。

????——“interactive”碍拆,鍵盤被拖動(dòng)交互式地摒棄并且與觸摸同步移動(dòng);向上拖動(dòng)取消了摒 棄若治。????


keyboardShouldPersistTaps布爾型

????????當(dāng)為假時(shí),當(dāng)鍵盤向上摒棄鍵盤時(shí)感混,輕擊外部關(guān)注文本輸入端幼。當(dāng)為真時(shí),滾動(dòng)視圖不會(huì)抓取輕擊弧满,鍵盤不會(huì)自動(dòng) 摒棄婆跑。默認(rèn)值是false。


maximumZoomScale數(shù)字型

????????最大允許縮放比例庭呜。默認(rèn)值是1.0滑进。


minimumZoomScale數(shù)字型

????????最小允許縮放比例。默認(rèn)值是1.0募谎。


onScroll函數(shù)型


onScrollAnimationEnd函數(shù)型


pagingEnabled布爾型

????????當(dāng)為真時(shí)扶关,滾動(dòng)視圖在滾動(dòng)時(shí)會(huì)在滾動(dòng)視圖的尺寸的倍數(shù)上停止?jié)L動(dòng)。這可以用于水平分頁(yè)数冬。默認(rèn)值是false节槐。


removeClippedSubviews布爾型

????????實(shí)驗(yàn): 當(dāng)為真時(shí),屏幕以外的子視圖(它的overflow值是`hidden )從本地備份的superview中刪除拐纱。這在長(zhǎng) 列表中可以提高滾動(dòng)性能铜异。默認(rèn)值是false。


scrollEnabled布爾型


scrollEventThrottle數(shù)字型


scrollIndicatorInsets {頂部:數(shù)字型秸架,左部:數(shù)字型揍庄,底部:數(shù)字型,右部:數(shù)字型}


scrollsToTop布爾型

????????當(dāng)為真時(shí)咕宿,輕擊狀態(tài)欄滾動(dòng)視圖會(huì)滾動(dòng)到頂部币绩。默認(rèn)值為true蜡秽。


showsHorizontalScrollIndicator布爾型


showsVerticalScrollIndicator布爾型


stickyHeaderIndices [數(shù)字型]

????????一組子視圖表明確定當(dāng)視圖滾動(dòng)時(shí)哪些子視圖會(huì)停靠在屏幕的頂端缆镣。例如芽突,傳遞stickyHeaderIndices = {[0]}將使得第一個(gè)子視圖固定在滾動(dòng)視圖的頂部。此屬性不支持與 horizontal = {true}結(jié)合董瞻。

3.4.2 style

Flexbox...

backgroundColor字符串型

borderBottomColor字符串型

borderColor字符串型

borderLeftColor字符串型

borderRadius數(shù)字型

borderRightColor字符串型

borderTopColor字符串型

opacity數(shù)字型

overflow枚舉型(‘visible’,’hidden’)

rotation數(shù)字型

scaleX數(shù)字型

scaleY數(shù)字型

shadowColor字符串型

shadowOffset {高:數(shù)字型寞蚌,寬:數(shù)字型}

shadowOpacity數(shù)字型

shadowRadius數(shù)字型

transformMatrix [數(shù)字型]

translateX數(shù)字型

translateY數(shù)字型

zoomScale數(shù)字型 當(dāng)前滾動(dòng)視圖內(nèi)容的規(guī)模。默認(rèn)值是1.0钠糊。

3.5 文本

????????用于顯示文本的響應(yīng)組件挟秤,支持嵌套、樣式和觸發(fā)處理抄伍。在接下來(lái)的例子中艘刚,嵌套的標(biāo)題和正文文本將從style s.baseText繼承FontFamily,但是標(biāo)題會(huì)提供它自己其他的設(shè)計(jì)風(fēng)格截珍。標(biāo)題和正文在文字換行時(shí)會(huì)堆疊在彼此 之上攀甚。

renderText: function() {

? return (

????<Text style={styles.baseText}>

? ? ????<Text style={styles.titleText} onPress={this.onPressTitle}>

???????????{this.state.titleText + '\n\n'}

????????</Text>

????????<Text numberOfLines={5}>

???????????{this.state.bodyText}

????????</Text>

????</Text>

? );

},

...

var styles = StyleSheet.create({

? baseText: {

??? fontFamily: 'Cochin',

? },

? titleText: {

??? fontSize: 20,

??? fontWeight: 'bold',

? },

};

3.5.1 Props

numberOfLines數(shù)值型

????????用于在計(jì)算文本布局后將文本和省略符號(hào)進(jìn)行截?cái)啵〒Q行岗喉,這樣總的行數(shù)就不會(huì)超過(guò)這個(gè)值秋度。


onPress函數(shù)

????????這個(gè)函數(shù)被稱為按下。在默認(rèn)高亮狀態(tài)下钱床,文本內(nèi)部是支持按下動(dòng)作處理的(該函數(shù)在suppressHighlighting是禁用的)荚斯。

3.5.2 style

View#style...

color字符串型

containerBackgroundColor字符串型

fontFamily字符串型

fontSize數(shù)值型

fontStyle enum('normal', 'italic')

fontWeight enum("normal", 'bold', '100', '200', '300', '400','500', '600', '700', '800', '900')

lineHeight數(shù)值型

textAlign enum("auto", 'left', 'right', 'center')

writingDirection enum("auto", 'ltr', 'rtl')

suppressHighlighting布爾型

????????值為真時(shí),當(dāng)文本被按下時(shí)沒(méi)有視覺(jué)上的變化查牌。默認(rèn)情況下事期,按下之前是一個(gè)灰色橢圓高亮的文本。

testID字符串型

????????在端到端測(cè)試時(shí)用于定位視圖

描述

3.6 容器

????????元素是與布局設(shè)計(jì)有特定關(guān)系的:內(nèi)部的一切都不再使用flexbox布局而是使用文本布局僧免。這意味著一 個(gè)內(nèi)部的元素不在是矩形的刑赶,而是在結(jié)尾的時(shí)候被包裝起來(lái)。

3.7 有限制性的樣式繼承

????????在網(wǎng)絡(luò)上懂衩,為整個(gè)文檔設(shè)置字體體系和大小的常用方法是:

/* CSS, *not* React Native */

html {

? font-family: 'lucida grande', tahoma, verdana, arial, sans-serif;

? font-size: 11px;

? color: #141823;

}

????????當(dāng)瀏覽器想要顯示一個(gè)文本節(jié)點(diǎn)時(shí),它會(huì)一直走到樹(shù)的根元素金踪,并且找到一個(gè)有font-size屬性的元素浊洞。該系統(tǒng) 一個(gè)意想不到的性質(zhì)是任何節(jié)點(diǎn)都可以有font-size屬性,包括一個(gè)<div>胡岔。這是為了方便而設(shè)計(jì)的法希,盡管語(yǔ)義 并不是正確的。

????????在React Naitve里靶瘸,我們關(guān)于這一點(diǎn)會(huì)更嚴(yán)格:你必須將<Text>組件里的所有節(jié)點(diǎn)都進(jìn)行包裝;你不能在<View>下直接擁有一個(gè)文本節(jié)點(diǎn)苫亦。

???? // BAD: will fatal, can't have a text node as child of a <View>

????<View>

?????? Some text

????</View>

???? // GOOD

????<View>

????????<Text>

???????? ????Some text

? ? ? ? </Text>

????</View>

????????你也失去了對(duì)整個(gè)子樹(shù)設(shè)置字體的能力毛肋。為了在你的應(yīng)用程序里使用一致為字體和大小,推薦使用的方法是創(chuàng)建 一個(gè)包括他們的MyAppText組件屋剑,并且在你的應(yīng)用程序里使用這個(gè)組件润匙。你可以使用該組件來(lái)構(gòu)成更多特定的 組件,比如用于其他類型文本的MyAppHeaderText組件唉匾。

<View>

? ? <MyAppText>Text styled with the default font for the entire application</MyAppText>

????<MyAppHeaderText>Text styled as a header</MyAppHeaderText>

</View>

????????React Native還有繼承風(fēng)格的概念孕讳,但是僅限于文本子樹(shù)。在這種情況下巍膘,第二部分將是粗體和紅色厂财。

<Text style={{fontWeight: 'bold'}}>

?????? I am bold

????<Text style={{color: 'red'}}>

???????? and red

????</Text>

</Text>

????????我們相信更多的文本約束方法將會(huì)產(chǎn)生更好的應(yīng)用程序:

????? (開(kāi)發(fā)人員)響應(yīng)組件的設(shè)計(jì)源于大腦中孤立的想法:你應(yīng)該有能力將你的組件放置在你應(yīng)用程序的任何一 個(gè)地方,相信只有工具是相同的峡懈,那么它的表現(xiàn)和行為都是相同的璃饱。文本屬性是可以從工具外繼承的,這會(huì) 打破這種孤立肪康。

????? (實(shí)現(xiàn)人員)ReactNative實(shí)現(xiàn)也是很簡(jiǎn)單的帜平。我們不需要對(duì)每一個(gè)單一的元素都要有一個(gè)FontFamily模塊,并且我們?cè)诿恳淮物@示一個(gè)文本節(jié)點(diǎn)時(shí)也不需要對(duì)樹(shù)遍歷到根節(jié)點(diǎn)梅鹦。風(fēng)格的繼承只需要在原生文本內(nèi) 部進(jìn)行編碼裆甩,不需要泄露給其他文本或者是系統(tǒng)本身。

3.8 文本輸入

????????通過(guò)鍵盤將文本輸入到應(yīng)用程序的一個(gè)基本的組件齐唆。屬性提供幾個(gè)功能的可配置性嗤栓,比如自動(dòng)校正,自動(dòng)還 原箍邮,占位符文本茉帅,和不同的鍵盤類型,如數(shù)字鍵盤锭弊。 最簡(jiǎn)單的一個(gè)用例是放置一個(gè)TextInput堪澎,利用Text事件來(lái)讀取用戶的輸入。還有其他的事件可以使用味滞,比如onSubmitEditing和onFocus樱蛤。一個(gè)簡(jiǎn)單的例 子:

onChange

<View>

????<TextInput

??? ????style={{height:40, borderColor: 'gray', borderWidth: 1}}

???????onChangeText={(text) => this.setState({input: text})}

? ? ?/>

? ? <Text> {'user input: ' + this.state.input}</Text>

</View>

3.8.1 屬性

? ? autoCapitalize enum('none', 'sentences', 'words','characters')

????????可以通知文本輸入自動(dòng)利用某些字符。

????? characters:所有字符剑鞍,

????? words:每一個(gè)單詞的首字母

????? sentences:每個(gè)句子的首字母(默認(rèn)情況下)

????? none:不會(huì)自動(dòng)使用任何東西


????autoCorrect布爾型

????????如果值為假昨凡,禁用自動(dòng)校正。默認(rèn)值為真蚁署。


????autoFocus布爾型

????????如果值為真便脊,聚焦componentDidMount上的文本。默認(rèn)值為假光戈。


????bufferDelay數(shù)值型

????????這個(gè)會(huì)幫助避免由于JS和原生文本輸入之間的競(jìng)態(tài)條件而丟失字符哪痰。默認(rèn)值應(yīng)該是沒(méi)問(wèn)題的遂赠,但是如果你每一 個(gè)按鍵都操作的非常緩慢仗谆,那么你可能想嘗試增加這個(gè)兑凿。


????clearButtonMode enum('never', 'while-editing','unless-editing', 'always')

????????清除按鈕出現(xiàn)在文本視圖右側(cè)的時(shí)機(jī)


????controlled布爾型

????????如果你真想要它表現(xiàn)成一個(gè)控制組件并思,你可以將它的值設(shè)置為真哗魂,但是按下按鍵怀偷,并且/或者緩慢打字抄瓦,你可能會(huì) 看到它閃爍济竹,這取決于你如何處理onChange事件伟恶。


????editable布爾型

????????如果值為假惋啃,文本是不可編輯的哼鬓。默認(rèn)值為真。


????enablesReturnKeyAutomatically布爾型

????????如果值為真边灭,當(dāng)沒(méi)有文本的時(shí)候鍵盤是不能返回鍵值的异希,當(dāng)有文本的時(shí)候會(huì)自動(dòng)返回。默認(rèn)值為假绒瘦。


????keyboardType enum('default', "ascii-capable",'numbers-and-punctuation', 'url', 'number-pad', 'phon e-pad', 'name-phone-pad','email-address', 'decimal-pad', 'twitter', 'web-search', "numeric")

????????決定打開(kāi)哪種鍵盤称簿,例如,數(shù)字鍵盤惰帽。


????multiline布爾型

????????如果值為真憨降,文本輸入可以輸入多行。默認(rèn)值為假该酗。


????onBlur函數(shù)

????????當(dāng)文本輸入是模糊的授药,調(diào)用回調(diào)函數(shù)


????onChange函數(shù)

????????當(dāng)文本輸入的文本發(fā)生變化時(shí),調(diào)用回調(diào)函數(shù)


????onChangeText函數(shù)


????onEndEditing函數(shù)


????onFocus函數(shù)

????????當(dāng)輸入的文本是聚焦?fàn)顟B(tài)時(shí)呜魄,調(diào)用回調(diào)函數(shù)


????onSubmitEditing函數(shù)


????password布爾型

????????如果值為真悔叽,文本輸入框就成為一個(gè)密碼區(qū)域。默認(rèn)值為假爵嗅。


????placeholder字符串型

????????在文本輸入之前字符串將被呈現(xiàn)出來(lái)


????placeholderTextColor字符串型

????????占位符字符串的文本顏色


????returnKeyType enum('default', 'go', 'google', 'join','next', 'route', 'search', 'send', 'yahoo', 'done', 'emergency-call')

????????決定返回鍵的樣式


????secureTextEntry布爾型

????????如果值為真娇澎,文本輸入框就會(huì)使輸入的文本變得模糊,以便于像密碼這樣敏感的文本保持安全睹晒。默認(rèn)值為假趟庄。


????selectionState文檔選擇狀態(tài)

????????見(jiàn)DocumentSelectionState.js,一些狀態(tài)是為了維護(hù)一個(gè)文檔的選擇信息册招。

3.8.2 styleText#style

testID字符串型

????用于端對(duì)端測(cè)試時(shí)定位視圖岔激。


value字符串型

????文本輸入的默認(rèn)值

3.9 高亮觸摸

????????一個(gè)包裝器是為了讓視圖對(duì)觸發(fā)做出合適的響應(yīng)。按下按鈕是掰,包裝后的視圖的透明性就會(huì)降低,這樣底襯的顏色就會(huì)顯示出來(lái)辱匿,使視圖顏色變暗或者著色键痛。底襯的出現(xiàn)是因?yàn)橄蛞晥D層次結(jié)構(gòu)添加了一個(gè)視圖炫彩,如果使用不正確的話,這有時(shí)候會(huì)導(dǎo)致不必要的認(rèn)為視覺(jué)效果絮短,例如江兢,如果包裝了的視圖的背景顏色不是很明確的設(shè)置成一個(gè)不透明的顏色。

3.9.1 屬性

????activeOpacity數(shù)值型

????????當(dāng)觸發(fā)處于活躍狀態(tài)時(shí)丁频,確定包裝后的使徒的不透明度杉允。

????style View#style

????????underlayColor字符串型 當(dāng)觸發(fā)處于活躍狀態(tài)時(shí),底襯的顏色會(huì)顯示出來(lái)席里。

3.10 不透明觸摸

????????一個(gè)包裝器是為了讓視圖對(duì)觸發(fā)做出合適的響應(yīng)叔磷。按下按鈕,包裝后的視圖的透明性就會(huì)降低奖磁,變暗改基。這個(gè)動(dòng)作的完成實(shí)際上并沒(méi)有改變視圖的層次,一般來(lái)說(shuō)很容易添加到一個(gè)應(yīng)用程序咖为,并且不會(huì)產(chǎn)生奇怪的副作用秕狰。????????

3.10.1 屬性

????activeOpacity數(shù)值

????????當(dāng)觸發(fā)處于活躍狀態(tài)時(shí),確定包裝后的使徒的不透明度躁染。

3.11 無(wú)反饋觸摸

3.11.1 成員函數(shù)

????onLongPress函數(shù)

????onPress函數(shù)

????????釋放觸摸時(shí)該函數(shù)被調(diào)用,但如果觸摸被取消則不調(diào)用(例如被竊取了應(yīng)答器鎖的滾動(dòng)取消)鸣哀。

????onPressIn函數(shù)

????onPressOut函數(shù)

3.12 視圖

????????創(chuàng)建UI最基本的組件,view是一個(gè)容器吞彤,它支持flexbox布局我衬、風(fēng)格、一些觸發(fā)處理备畦,和可訪問(wèn)性控制低飒,它被設(shè)計(jì)成嵌套在其他視圖里,并且有0到很多個(gè)任意類型的孩子懂盐。view直接映射到原生視圖褥赊,相當(dāng)于在任意正在運(yùn)行的平臺(tái)上的響應(yīng),不管它是UIView莉恼,<div>拌喉,android.view,等等俐银。這個(gè)例子創(chuàng)建了一個(gè)視圖尿背,將兩個(gè) 顏色的框和自定義的組件打包填充成一行。

3.12.1 屬性

????accessibilityLabel字符串型

????????當(dāng)用戶與元素進(jìn)行交互時(shí)捶惜,覆蓋通過(guò)屏幕閱讀器閱讀的文本田藐。在默認(rèn)情況下,標(biāo)簽是通過(guò)遍歷所有孩子和累積所有由空間隔開(kāi)的文本節(jié)點(diǎn)創(chuàng)建的。

????accessible布爾型

????????當(dāng)它的值為真時(shí)汽久,說(shuō)明視圖是一個(gè)可訪問(wèn)的元素鹤竭。在默認(rèn)情況下,所有的可觸發(fā)的元素都是可以被訪問(wèn)的景醇。

????onMoveShouldSetResponder函數(shù)

????????對(duì)于大多數(shù)的觸發(fā)交互臀稚,你可能只是想在TouchableHighlight或者TouchableOpacity里包裝你的組件。為了 進(jìn)一步的探討三痰,檢查Touchable.js吧寺,ScrollResponder.js和ResponderEventPlugin.js。

????onResponderGrant函數(shù)

????onResponderMove函數(shù)

????onResponderReject函數(shù)

????onResponderRelease函數(shù)

????onResponderTerminate函數(shù)

????onResponderTerminationRequest函數(shù)

????onStartShouldSetResponder函數(shù)

????onStartShouldSetResponderCapture函數(shù)

????pointerEvents enum('box-none', 'none', 'box-only', 'auto')

????????缺乏auto屬性散劫,none更像是CSS的none值稚机。box-none就好像你已經(jīng)應(yīng)用了CSS類:

.box-none {

??pointer-events: none;

?}

?.box-none * {

??pointer-events: all;

?}

box-only相當(dāng)于

.box-only {

??pointer-events: all;

?}

?.box-only * {

?? pointer-events: none;

?}

????????但是由于pointerEvents并不影響布局/外觀,通過(guò)添加附加模式舷丹,我們已經(jīng)偏離了規(guī)范抒钱,我們選擇在style上不包括pointerEvents。在一些平臺(tái)上颜凯,不管怎樣偶們都需要將它作為一個(gè)className來(lái)實(shí)現(xiàn)谋币。是否使用style時(shí)這個(gè)平臺(tái)的實(shí)現(xiàn)細(xì)節(jié)。


removeClippedSubviews布爾

????????這是一個(gè)通過(guò)RCTView顯示的特定性能屬性症概,當(dāng)有很多子視圖蕾额,并且它們大部分都是在幕后,這時(shí)被用于滾動(dòng)內(nèi)容彼城。為了使這個(gè)屬性有效诅蝶,它必須被應(yīng)用到一個(gè)視圖中,在這個(gè)視圖里包含很多子視圖和外部約束募壕。子視圖中還應(yīng)該有溢出:隱藏调炬,應(yīng)該包含視圖(或者它的一個(gè)子視圖)。


style字體

backgroundColor字符串

borderBottomColor字符串

borderColor字符串

borderLeftColor字符串

borderRadius數(shù)值

borderRightColor字符串

borderTopColor字符串

opacity數(shù)值

overflow enum('visible', 'hidden')

rotation數(shù)值

scaleX數(shù)值

scaleY數(shù)值

shadowColor字符串

shadowOffset {h: number, w: number}

shadowOpacity數(shù)值

shadowRadius數(shù)值

transformMatrix [數(shù)值]

translateX數(shù)值

translateY數(shù)值

testID字符串型

????????在端到端測(cè)試中用于定位視圖

3.13 Web視圖

3.13.1 屬性

automaticallyAdjustContentInset布爾型

contentInset {top: number, left: number, bottom: number, right: number}

html字符串型

onNavigationStateChange函數(shù)

renderError函數(shù)

renderLoading函數(shù)

shouldInjectAJAXHandler布爾型

startInLoadingState布爾型


style View#style

url字符串型

4 資源加載

4.1 靜態(tài)資源

????????在項(xiàng)目的進(jìn)程中舱馅,添加并且移除和處理那些在應(yīng)用程序不是經(jīng)常使用的圖片是很常見(jiàn)的情況缰泡。為了處理這種情 況,我們需要找到一個(gè)方法來(lái)靜態(tài)地定位那些被用在應(yīng)用程序里的圖片代嗤。因此棘钞,我們使用了一個(gè)標(biāo)記器。唯一允 許的指向bundle里的圖片的方法就是在源文件中遍歷地搜索require('image!name-of-the-asset')干毅。


// GOOD

<Image source={require('image!my-icon')} />

// BAD

var icon = this.props.active ? 'my-icon-active' :'my-icon-inactive';

<Image source={require('image!' + icon)} />

// GOOD

var icon = this.props.active ?require('image!my-icon-active') : require('image!my-icon-inactive');

<Image source={icon} />

????????當(dāng)主要的代碼執(zhí)行到這里宜猜,你就可以做一些有趣的事情,比如自動(dòng)將那些用于應(yīng)用程序的assets打包硝逢。注 意姨拥,這些代碼不是強(qiáng)制實(shí)施的绅喉,但不代表將來(lái)也不會(huì)。

4.1.1 使用Images.xcassets將靜態(tài)資源添加到你的iOS應(yīng)用程序中

NOTE: 生成應(yīng)用程序所需的新資源

????????無(wú)論在什么時(shí)候垫毙,您想把新的資源添加到Images.xcassets中霹疫,您都需要在使用它之前通過(guò)Xcode來(lái)重新構(gòu) 建您的應(yīng)用程序 — — 僅在模擬器內(nèi)重新加載它是不夠的拱绑。

????????這一進(jìn)程正在被改進(jìn)综芥,不久就會(huì)提供更好的工作流程。

4.1.2 將靜態(tài)資源添加到您的Android應(yīng)用程序中

????????將您的圖像作為位圖畫板添加到android項(xiàng)目中( <yourapp>/android/app/src/main/res)猎拨。為了給您的assets文件提供不同的分辨率膀藐,使用配置限定符進(jìn)行檢查。 通常情況下红省,您將想要把您的assets文件放在下列目錄(如果它們不存在额各,那么在res下創(chuàng)建它們):

????? drawable-mdpi (1x)

????? drawable-hdpi (1.5x)

????? drawable-xhdpi (2x)?

????? drawable-xxhdpi (3x)

????????如果您的asset文件丟失了一種分辨率,那么Android將采取下一個(gè)最好的分辨率并且為您調(diào)整它的大小吧恃。


????NOTE:生成應(yīng)用程序所需的新資源

????????無(wú)論在什么時(shí)候您把新的資源添加到您的畫板中您都需要在使用它之前通過(guò)運(yùn)行react-nativerun-android重新構(gòu)建您的應(yīng)用程序-僅重新加載JS是不夠的虾啦。

????????這一進(jìn)程正在被改進(jìn),不久就會(huì)提供更好的工作流程痕寓。

4.2 網(wǎng)絡(luò)資源

????????在您進(jìn)行編譯的時(shí)候傲醉,許多您的應(yīng)用程序中需要展示的圖片都不能使用,或者你會(huì)想要通過(guò)加載一些動(dòng)態(tài)圖片來(lái)保持二進(jìn)制大小在較低的狀態(tài)呻率。不像靜態(tài)資源那樣硬毕,您將需要手動(dòng)指定圖像的尺寸。????

// GOOD

<Image source={{uri: 'https://facebook.github.io/react/img/logo_og.png'}}

?????? style={{width:400, height: 400}} />


// BAD

<Image source={{uri: 'https://facebook.github.io/react/img/logo_og.png'}} />

4.3 本地文件系統(tǒng)資源

????????請(qǐng)?jiān)?CameraRoll 中查看使用 Images.xcassets 之外的本地資源示例 礼仗。

4.4 Source是一個(gè)對(duì)象類型

????????在ReactNative中吐咳,一個(gè)有趣的決定是src特性將會(huì)被命名為source,并且不作為一個(gè)字符串而是一個(gè)uri特性的對(duì)象類型元践。

<Image source={{uri: 'something.jpg'}} />

????????站在底層來(lái)看韭脊,這樣做的原因是它允許將元數(shù)據(jù)依附到這個(gè)對(duì)象中。舉個(gè)例子单旁,你正在使用require('image!icon')沪羔,我們將添加isStatic作為一個(gè)flag來(lái)標(biāo)識(shí)本地文件(不要依賴這例子,將來(lái)這可能會(huì)改變!)慎恒。這在 將來(lái)同時(shí)也會(huì)成為可能任内,比如我們可能會(huì)支持子畫面,并用它來(lái)取代輸出{uri: ...}融柬,我們可以輸出{uri: ..., crop: {left: 10, top:50, width: 20, height: 40}}同時(shí)支持在所有已經(jīng)存在的網(wǎng)站中透明地顯示子畫 面死嗦。

????????在用戶角度上,這會(huì)讓你用有用的特性比如圖片的幾何尺寸來(lái)注釋對(duì)象類型粒氧,從而計(jì)算出將要顯示出來(lái)的尺寸越除。盡情地使用這種數(shù)據(jù)類型來(lái)儲(chǔ)存你的圖片吧。

4.5 背景圖片疊加

return (

????<Image source={...}>

? ? ? ?<Text>Inside</Text>

????</Image>

);

4.6 非主線程加載

????????圖片的解析會(huì)花費(fèi)很多的時(shí)間。這是導(dǎo)致網(wǎng)頁(yè)的幀數(shù)下降的其中一個(gè)重要的原因摘盆,因?yàn)榻馕龉ぷ鲿?huì)被執(zhí)行在主線 程中翼雀。在React Native中,圖片的解析會(huì)在不同的線程中執(zhí)行孩擂。在實(shí)際操作中狼渊,你已經(jīng)處理好這種情況,當(dāng)圖 片還沒(méi)有下載完成类垦,因此需要將placeholder顯示出來(lái)狈邑,這不用你寫任何代碼。????

4.7 應(yīng)用程序注冊(cè)表

????????AppRegistry是運(yùn)行所有ReactNative應(yīng)用程序的JS入口點(diǎn)蚤认。應(yīng)用程序跟組件需要通過(guò)AppRegistry.registerComponent來(lái)注冊(cè)它們自身米苹,然后本地系統(tǒng)就可以加載應(yīng)用程序的包,再然后當(dāng)AppRegistry.runApplication準(zhǔn)備就緒后就可以真正的運(yùn)行該應(yīng)用程序了砰琢。

????????AppRegistry在require序列里是required蘸嘶,確保在其他模塊被需要之前JS執(zhí)行環(huán)境已經(jīng)被required。

4.7.1 方法

static **registerConfig**(config: Array)

static **registerComponent**(appKey: string, getComponentFunc: Function)

static **registerRunnable**(appKey: string, func: Function)

static **runApplication**(appKey: string, appParameters: any)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末陪汽,一起剝皮案震驚了整個(gè)濱河市训唱,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掩缓,老刑警劉巖雪情,帶你破解...
    沈念sama閱讀 206,968評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異你辣,居然都是意外死亡巡通,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門舍哄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宴凉,“玉大人,你說(shuō)我怎么就攤上這事表悬∶殖” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 153,220評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵蟆沫,是天一觀的道長(zhǎng)籽暇。 經(jīng)常有香客問(wèn)我,道長(zhǎng)饭庞,這世上最難降的妖魔是什么戒悠? 我笑而不...
    開(kāi)封第一講書人閱讀 55,416評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮舟山,結(jié)果婚禮上绸狐,老公的妹妹穿的比我還像新娘卤恳。我一直安慰自己,他們只是感情好寒矿,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,425評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布突琳。 她就那樣靜靜地躺著,像睡著了一般符相。 火紅的嫁衣襯著肌膚如雪拆融。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書人閱讀 49,144評(píng)論 1 285
  • 那天主巍,我揣著相機(jī)與錄音冠息,去河邊找鬼。 笑死孕索,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的躏碳。 我是一名探鬼主播搞旭,決...
    沈念sama閱讀 38,432評(píng)論 3 401
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼菇绵!你這毒婦竟也來(lái)了肄渗?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書人閱讀 37,088評(píng)論 0 261
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤咬最,失蹤者是張志新(化名)和其女友劉穎翎嫡,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體永乌,經(jīng)...
    沈念sama閱讀 43,586評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡惑申,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,028評(píng)論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了翅雏。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圈驼。...
    茶點(diǎn)故事閱讀 38,137評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖望几,靈堂內(nèi)的尸體忽然破棺而出绩脆,到底是詐尸還是另有隱情,我是刑警寧澤橄抹,帶...
    沈念sama閱讀 33,783評(píng)論 4 324
  • 正文 年R本政府宣布靴迫,位于F島的核電站,受9級(jí)特大地震影響楼誓,放射性物質(zhì)發(fā)生泄漏玉锌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,343評(píng)論 3 307
  • 文/蒙蒙 一慌随、第九天 我趴在偏房一處隱蔽的房頂上張望芬沉。 院中可真熱鬧躺同,春花似錦、人聲如沸丸逸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,333評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)黄刚。三九已至捎谨,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間憔维,已是汗流浹背涛救。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,559評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留业扒,地道東北人检吆。 一個(gè)月前我還...
    沈念sama閱讀 45,595評(píng)論 2 355
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像程储,于是被迫代替她去往敵國(guó)和親蹭沛。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,901評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容