React Native 技術(shù)分享markdown版本,請(qǐng)使用markdonw看該版本

# React Native

## 1.React Native之了解

### 1.1 Native開(kāi)發(fā)優(yōu)勢(shì):

>##### Native的原生控件有更好的體驗(yàn);

>##### Native有更好的手勢(shì)識(shí)別;

>##### Native有更合適的線程模型,盡管Web Worker可以解決一部分問(wèn)題,但如圖像解碼、文本渲染仍無(wú)法多線程渲染,這影響了Web的流暢性。

### 1.2 React Native優(yōu)勢(shì):

>#####1.既擁有Native的用戶體驗(yàn)、又保留React的開(kāi)發(fā)效率(RN通過(guò)JavaScript Core解析JavaScript模塊,轉(zhuǎn)換成原生Native組件渲染)

>##### 2.React Native基本完成了對(duì)多端的支持,可以靈活的使用HTML和CSS布局,使用React語(yǔ)法構(gòu)建組件,實(shí)現(xiàn):H5, Android, iOS多端代碼的復(fù)用

>#####3.追求極致的用戶體驗(yàn):實(shí)時(shí)熱部署(CodePush在修復(fù)一些小問(wèn)題和添加新特性的時(shí)候,不需要經(jīng)過(guò)二進(jìn)制打包,可以直接推送代碼進(jìn)行實(shí)時(shí)更新。)

>##### 4.UI排版的問(wèn)題:

######類似HTML + CSS的排版使用原生控件渲染的框架:

###### BeeFramework,BeeFramework雖然開(kāi)源多年,而且有2000多的star數(shù),但是受限于它自身的影響力以及框架的復(fù)雜性,一直沒(méi)有很大的成功。

###### React Native采用了類似HTML + CSS的排版,可以內(nèi)嵌到模塊,也可以全局使用,定義樣式變得非常簡(jiǎn)單通用。引入了Flexbox布局,使用很方便,學(xué)習(xí)起來(lái)也更簡(jiǎn)單。

>##### 5.動(dòng)態(tài)綁定,這個(gè)React的基本功能,被帶到了客戶端開(kāi)發(fā)中來(lái),數(shù)據(jù)和視圖是動(dòng)態(tài)綁定的,數(shù)據(jù)發(fā)生變化,視圖會(huì)跟著變化,很多操作視圖的代碼都可以省略了。

>##### 6.引入了方便的npm管理,有大量現(xiàn)成的nodejs包可以用(例如moment,underscore等常用模塊),還可以把自己項(xiàng)目模塊搞到內(nèi)部npm上做通用組件,另外,npm上還有不少別人寫的react native的插件。

>##### 7.第三方組件里有一個(gè)可以把icon font引入項(xiàng)目的組件,可以在任何顯示圖標(biāo)的地方直接用icon font顯示

>##### 8.調(diào)試很方便,一次編譯后,每次改了js代碼,只需要在模擬器里command+R即可重新加載代碼。有問(wèn)題會(huì)直接報(bào)錯(cuò),里面有代碼行數(shù)等詳細(xì)信息。

>##### 9.完整封裝了各種js內(nèi)置的方法,例如:setTimeout,setInterval,XMLHttpRequest,localstorage,console.log等,都是用oc原生方法封裝的。

>##### 10.引入ES6的支持,可以使用各種新特性,例如最常用的箭頭函數(shù),解決this作用域亂套的問(wèn)題。

### 1.3 React Native是什么?

![基本概念](https://github.com/hebing789/markdown_img_hebin/raw/master/1.png)

>##### ?Facebook于2015年9月15日發(fā)布React Native

>#####廣大開(kāi)發(fā)者可以使用JavaScript和React開(kāi)發(fā)跨平臺(tái)移動(dòng)應(yīng)用.

>##### React Native提倡組件化開(kāi)發(fā):即提供一個(gè)個(gè)封裝好的組件,組件相互嵌套形成新的組件

### 1.4 React Native開(kāi)發(fā)注意事項(xiàng)

>#####目前react native在iOS上僅支持iOS8以上,Android僅支持Android4.1以上版本;

>#####由于React Native的版本更新速度很快,如果沒(méi)有深厚的JavaScript基礎(chǔ),建議選擇:

######功能適中,交互一般,不需要特別多的系統(tǒng)原生支持;

######對(duì)于部分復(fù)雜的應(yīng)用,可以考慮原生+React Native混合開(kāi)發(fā)

>#####學(xué)習(xí)網(wǎng)站:

###### ?github地址: ?https://github.com/facebook/react-native

######官網(wǎng)文檔:?http://facebook.github.io/react-native/docs/getting-started.html

### 1.5 React Native開(kāi)發(fā)環(huán)境:

>#####參考中文React Native網(wǎng)站:

React Native開(kāi)發(fā)環(huán)境配置


## 2.React Native之學(xué)習(xí)

### 2.1 FlexBox布局:

>#####彈性盒模型(The Flexible Box Module),又叫Flexbox,意為“彈性布局”,旨在通過(guò)彈性的方式來(lái)對(duì)齊和分布容器中內(nèi)容的空間,使其能適應(yīng)不同屏幕,為盒裝模型提供最大的靈活性。

>##### Flex布局主要思想是:讓容器有能力讓其子項(xiàng)目能夠改變其寬度、高度(甚至是順序),以最佳方式填充可用空間;

>##### Flex學(xué)習(xí)入門網(wǎng)站:Flex布局教程

>##### flex基本概念:

![flex基本概念](http://www.ruanyifeng.com/blogimg/asset/2015/bg2015071004.png)

######采用Flex布局的元素,稱為Flex容器(flex container),簡(jiǎn)稱"容器"。它的所有子元素自動(dòng)成為容器成員,稱為Flex項(xiàng)目(flex item),簡(jiǎn)稱"項(xiàng)目"。

######容器默認(rèn)存在兩根軸:水平的主軸(main axis)和垂直的交叉軸(cross axis)。主軸的開(kāi)始位置(與邊框的交叉點(diǎn))叫做main start,結(jié)束位置叫做main end;交叉軸的開(kāi)始位置叫做cross start,結(jié)束位置叫做cross end。

######項(xiàng)目默認(rèn)沿主軸排列。單個(gè)項(xiàng)目占據(jù)的主軸空間叫做main size,占據(jù)的交叉軸空間叫做cross size。

>##### **flex常用屬性總結(jié):**

>######容器屬性:

###### flex-direction(主軸方向)

###### flex-wrap(是否換行)

###### justify-content(item在主軸對(duì)齊方式) ,

###### align-items(item在交叉軸上如何對(duì)齊) ,

>######元素屬性:

###### Flex:彈性寬度:寬度=item該flex值/該容器所有item的flex和*(容器寬度-該容器item沒(méi)有設(shè)置flex的直接寬度)

###### align-self:性允許單個(gè)項(xiàng)目有與其他項(xiàng)目不一樣的對(duì)齊方式,可覆蓋align-items屬性

### 2.2 Touchable系列組件:

>#####***高亮觸摸TouchableHighlight:***

當(dāng)手指點(diǎn)擊按下的時(shí)候,該視圖的不透明度會(huì)進(jìn)行降低同時(shí)會(huì)看到相應(yīng)的顏色,其實(shí)現(xiàn)原理則是在底層新添加了一個(gè)View。TouchableHighlight只能進(jìn)行一層嵌套,不能多層嵌套。

>######常用屬性:

######activeOpacity? number設(shè)置組件在進(jìn)行觸摸的時(shí)候,顯示的不透明度(取值在0-1之間)

######onHideUnderlay? function方法當(dāng)?shù)讓颖浑[藏的時(shí)候調(diào)用

######onShowUnderlay? function方法當(dāng)?shù)讓语@示的時(shí)候調(diào)用

######style可以設(shè)置控件的風(fēng)格演示,該風(fēng)格演示可以參考View組件的style

###### underlayColor當(dāng)觸摸或者點(diǎn)擊控件的時(shí)候顯示出的顏色

>#####***不透明觸摸TouchableOpacity***

該組件封裝了響應(yīng)觸摸事件;當(dāng)點(diǎn)擊按下的時(shí)候,該組件的透明度會(huì)降低。等等

#####代碼示例

```

style={styles.button}

source={require('./button.png')}

/>

```

```

style={styles.button}

source={require('image!myButton')}

/>

```

### 2.3組件生命周期:

![基本概念](https://github.com/hebing789/markdown_img_hebin/raw/master/2.png)

>#####***一:實(shí)例化階段函數(shù)分析:***

######1,getDefaultProps

初始化一些默認(rèn)的屬性,通常會(huì)將固定的內(nèi)容放在這個(gè)函數(shù)中進(jìn)行初始化和賦值;

可以利用this.props獲取組件在這里初始化它的屬性,組件自己不可以自己修改props(即:props可認(rèn)為是只讀的)

######2,getInitialState

用于對(duì)組件的一些狀態(tài)進(jìn)行初始化;在以后的過(guò)程中,會(huì)再次調(diào)用,所以可以將控制控件的狀態(tài)的一些變量放在這里初始化,如控件上顯示的文字,可以通過(guò)this.state來(lái)獲取值,通過(guò)this.setState來(lái)修改state值,一旦調(diào)用了this.setState方法,組件一定會(huì)調(diào)用render方法,React框架會(huì)自動(dòng)根據(jù)DOM的狀態(tài)來(lái)判斷是否需要真正的渲染。

######3,componentWillMount

相當(dāng)于OC中的ViewWillAppear方法.

######4,render

render是一個(gè)組件中必須有的方法,本質(zhì)上是一個(gè)函數(shù),并返回JSX或其他組件來(lái)構(gòu)成DOM,和Android的XML布局類似,注意:只能返回一個(gè)頂級(jí)元素;可通過(guò)this.state和this.props數(shù)據(jù)。

######5,componentDidMount

在調(diào)用了render方法后一般會(huì)在這個(gè)函數(shù)中處理網(wǎng)絡(luò)請(qǐng)求等加載數(shù)據(jù)的操作;因?yàn)閁I已經(jīng)成功被渲染出來(lái),所以放在這個(gè)函數(shù)里進(jìn)行請(qǐng)求操作,不會(huì)出現(xiàn)UI上的錯(cuò)誤。

>#####***二,存在期階段函數(shù)功能分析:***

######componentWillReceiveProps

指父元素對(duì)組件的props或state進(jìn)行了修改

######shouldComponentUpdate

一般用于優(yōu)化,可以返回false或true來(lái)控制是否進(jìn)行渲染

######componentWillUpdate

組件刷新前調(diào)用,類似componentWillMount

######componentDidUpdate

更新后的hook

>#####***三、銷毀期階段函數(shù)功能分析:***

用于清理一些無(wú)用的內(nèi)容,如:點(diǎn)擊事件Listener,只有一個(gè)過(guò)程:componentWillUnmount

### 2.4請(qǐng)求網(wǎng)絡(luò)數(shù)據(jù):

>#####***React Native中通常是通過(guò)Ajax (異步的JavaScript和XML)請(qǐng)求從服務(wù)器獲取數(shù)據(jù),然后在componentDidMount方法中創(chuàng)建Ajax請(qǐng)求,等到請(qǐng)求成功,再用this.setState方法重新渲染UI。***

### 2.5 OC, Recat Native混合開(kāi)發(fā):

>#####***直接在iOS項(xiàng)目中寫代碼就能實(shí)現(xiàn)OC,reactNative混合開(kāi)發(fā),在需要引入React Native的位置引用該模塊即可***

AppDelegate.m部分代碼

```

jsCodeLocation = [[RCTBundleURLProvider sharedSettings] jsBundleURLForBundleRoot:@"index.ios" fallbackResource:nil];

RCTRootView *rootView = [[RCTRootView alloc] initWithBundleURL:jsCodeLocation

moduleName:@"TGMeituan"

initialProperties:nil

launchOptions:launchOptions];

```

index.ios.js部分代碼

```

AppRegistry.registerComponent('TGMeituan', () => TGMeituan);

```

xcode的代碼引用了index.ios.js文件中的'TGMeituan',

index.ios.js其輸出了index.ios.js定義的一個(gè)TGMeituan組件

AppDelegate.m中在合適的位置引用rootView,即可實(shí)現(xiàn)混合開(kāi)發(fā)

```

export default class TGMeituan extends Component {

render() {

return (

);

}

}

```

### 2.6 ES5和ES6的React Native差異化:

>#####區(qū)別1:創(chuàng)建組件

組件是一個(gè)自定義的js對(duì)象,在es5中使用React.createClass();在es6中必須繼承React.component,

>#####區(qū)別2:組件的屬性props

在ES6中,其為屬性:defaultProps(可以標(biāo)識(shí)static定義在class內(nèi),也可以定義在class外),而在ES5中,其為方法:getDefaultProps: function(){return {name:value}};

>#####區(qū)別3:組件的狀態(tài)state

上圖左為ES5 ,右為ES6

### 2.7 React Native不足:

>#####組件不全,第三方組件也不全,遇到某些特殊功能,需要搗鼓很久,例如攝像相關(guān)的,文件讀寫,文件上傳之類的組件。

>#####性能并非媲美原生,還是有一些損耗的,特別是交換大數(shù)據(jù)的時(shí)候,例如讀取相冊(cè)。

>#####ios和android代碼并非通用,有可能會(huì)需要維護(hù)兩套,或者在代碼內(nèi)做一些判斷。

>#####并非網(wǎng)上大家說(shuō)的,寫一次代碼,多端通用,網(wǎng)頁(yè)版和客戶端版完全不是一個(gè)概念,只有部分代碼可重用。

>#####把代碼都打包到bundle里面,不知道蘋果對(duì)這種開(kāi)發(fā)方式是否會(huì)不太喜歡,甚至拒絕上線。

>#####打包出來(lái)的JSBundle過(guò)大;

>#####首次進(jìn)入RN頁(yè)面加載緩慢;

>#####穩(wěn)定性不夠,有大量因?yàn)镽N導(dǎo)致的Crash:

iOS的Crash,基本都來(lái)自RCTFatalException,都是RCTFatal拋出錯(cuò)誤信息所知,處理也相對(duì)簡(jiǎn)單,設(shè)置自己的Error Handler即可。

void RCTSetFatalHandler(RCTFatalHandler fatalHandler);

>#####大數(shù)據(jù)量時(shí)ListView加載卡頓。

## 3.ListView重用優(yōu)化

### 3.1 ListView不能重用的原因

>#####首先RN的ListView其實(shí)是基于RN的RCTScrollView來(lái)實(shí)現(xiàn)的。它也實(shí)現(xiàn)了類似UIKit中通過(guò)DataSource來(lái)控制數(shù)據(jù),以及是否要做一些界面的刷新

>#####這個(gè)View會(huì)有一個(gè)RCTView會(huì)引用它。當(dāng)這個(gè)View被移出屏幕之外,再觀察他的內(nèi)存引用時(shí),它就只被RCTUIManager引用了:

>#####RN為了能夠保持一定的UI上的性能,他用UImanager來(lái)管理所有的UI元素,只要?jiǎng)?chuàng)建過(guò)的,還有可能被顯示在界面上的東西,他都用這個(gè)UImanager來(lái)去管理,從而在進(jìn)行Dom Diff時(shí)能夠減少View的創(chuàng)建和銷毀。

###3.2 ListView多做了什么?

>#####然后,我們?cè)賮?lái)看看ListView本身比RCTScrollView多做的哪些東西,首先ListView包含兩個(gè)屬性—- initialListSize和pageSize,initialListSize決定了第一屏加載item的數(shù)量,pageSize則是當(dāng)你需要加載更多的時(shí)候,每次需要載入多少的item,這樣做的主要目的在盡量減少你手機(jī)加載第一屏?xí)r所需要的時(shí)間。

>#####還有就是它還實(shí)現(xiàn)了從JS端實(shí)現(xiàn)了Section Header,Header,F(xiàn)ooter的封裝,以及實(shí)現(xiàn)了監(jiān)聽(tīng)onScroll事件,隨著View的滾動(dòng)動(dòng)態(tài)的添加row view。

###3.3那么ListView相當(dāng)于UITableView少了一點(diǎn)什么呢?

>#####怎么沒(méi)有提到復(fù)用?


我們先看一下iOS的JS,JS里面只有一行代碼

```

module.exports = require('ScrollView');

```

###3.4 ListView性能優(yōu)化解決方案

Bridge一個(gè)UITableView

在RN中我們要bridge一個(gè)RN的View組件,我們需要實(shí)現(xiàn)RCTComponent這個(gè)protocol,這里有兩個(gè)很重要的方法

- (void)insertReactSubview:(id)subview atIndex:(NSInteger)atIndex;

- (void)removeReactSubview:(id)subview;

這兩個(gè)方法是RN做Dom Diff的關(guān)鍵

什么是Dom Diff呢

在界面發(fā)生變化前,界面存在一個(gè)Dom Tree,發(fā)生業(yè)務(wù)變化之后是另外一個(gè)Dom tree,Tree中的每個(gè)元素都有自己的引用值,Diff其實(shí)就是找出兩個(gè)Tree的差異點(diǎn)來(lái)確定需要進(jìn)行更新的節(jié)點(diǎn)。最終確定一個(gè)需要插入和刪除的View的列表,并通知相應(yīng)的Dom節(jié)點(diǎn)來(lái)處理。


但是RN的UI處理方式和原生對(duì)UI處理完全不一樣,我們?nèi)绾蜝ridge一個(gè)TableView呢,我們想到了一個(gè)方法。

我們創(chuàng)建一些VirtualView,他只是遵從了RCTComponent協(xié)議,他其實(shí)并不是一個(gè)真正的View,我把它形成一個(gè)組件,把它Bridge到JS,這就使得,你在寫JSX的時(shí)候,就可以直接用VirtualView來(lái)去做布局了。在RN里面做布局的時(shí)候我們用VirtualView來(lái)做布局。但是最終在insertReactSubview時(shí),我們把這些VirtualView當(dāng)做數(shù)據(jù)去處理,通過(guò)VirtualView和RealView的對(duì)應(yīng)關(guān)系,把它轉(zhuǎn)化成一個(gè)真實(shí)的View對(duì)象添加到TableView中去。

用這個(gè)圖來(lái)說(shuō),更清晰一些。


首先我們寫的是一個(gè)JSX,React把它轉(zhuǎn)化成Dom Tree,在進(jìn)行Dom Diff后,React會(huì)調(diào)用insertReactSubview傳入VirtualView,我們通過(guò)VirtualView生成Tree Data,

通過(guò)VirtualView和RealView的對(duì)應(yīng)關(guān)系,我們創(chuàng)建RealView去真正的添加到原生的View上。

但是這里又產(chǎn)生另外一個(gè)問(wèn)題,大家會(huì)自定義一個(gè)cell的一個(gè)對(duì)象來(lái)去做的。這個(gè)對(duì)象,能夠接收你特定的數(shù)據(jù),對(duì)這個(gè)cell重新去set一些控件的值,然后把界面更新。

但是在JS里面我們并沒(méi)有辦法這樣做,在RN中,我們不可能動(dòng)態(tài)的去往Native里面去加一個(gè)類。

那么我們是如何做到,在復(fù)用的時(shí)候?qū)τ贑ell上面的子View能夠去設(shè)置更新他的數(shù)據(jù)?


我們?cè)谒凶觱iew上面我們也加上了tag屬性,在更新數(shù)據(jù)的時(shí)候我們通過(guò)tag找到更新的子view上面的view對(duì)他做數(shù)據(jù)的更新的。所以并不是只有Cell有這樣的tag,包括子view也會(huì)有這樣的tag,這樣就做到了可以獲取到對(duì)應(yīng)tag的子view并對(duì)子view的數(shù)據(jù)進(jìn)行更新。


最后,為了客戶端的同學(xué)在使用這個(gè)TableView時(shí)更好上手一些,我們把幾乎整套的TableViewDataSource方法,全部照搬到了RN中,所以我們?cè)趧?chuàng)建這個(gè)ListView的時(shí)候我們需要去設(shè)置很多的回調(diào)方法,這樣做也是為了能夠更快的做一些界面的遷移工作。

###3.5 ListView性能優(yōu)化解決方案的缺點(diǎn)

>#####首先既然它需要做映射,我們肯定需要做一個(gè)Virtualview到NativeView,大多數(shù)的cell里面如果做展示來(lái)用的話,Label和Image基本上能夠滿足大多數(shù)的需求了。所以我們現(xiàn)在只是做了Label和Image的對(duì)應(yīng)工作,但在RN的一些官方控件,在這個(gè)view里面都是沒(méi)法直接使用的。

>#####還有一個(gè)缺點(diǎn)就是說(shuō),因?yàn)槲覀兪前凑誘ableView的邏輯去做的,這個(gè)邏輯其實(shí)在Android上可能不適用,因?yàn)锳ndroid的ListView實(shí)現(xiàn)跟iOS完全不是一個(gè)邏輯,導(dǎo)致使用這個(gè)ListView的RN代碼,可能沒(méi)法直接應(yīng)用到Android里面去。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,117評(píng)論 6 537
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 98,860評(píng)論 3 423
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人,你說(shuō)我怎么就攤上這事。” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 177,128評(píng)論 0 381
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)。 經(jīng)常有香客問(wèn)我,道長(zhǎng),這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 63,291評(píng)論 1 315
  • 正文 為了忘掉前任,我火速辦了婚禮,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 72,025評(píng)論 6 410
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 55,421評(píng)論 1 324
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼。 笑死,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,477評(píng)論 3 444
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 42,642評(píng)論 0 289
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 49,177評(píng)論 1 335
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 40,970評(píng)論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 43,157評(píng)論 1 371
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,717評(píng)論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 44,410評(píng)論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 34,821評(píng)論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 36,053評(píng)論 1 289
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 51,896評(píng)論 3 395
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 48,157評(píng)論 2 375

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,682評(píng)論 25 708
  • React Native優(yōu)秀博客,以及優(yōu)秀的Github庫(kù)列表(很多英文資料源自于[awesome-react-n...
    董董董董董董董董董大笨蛋閱讀 10,676評(píng)論 4 162
  • React Native 1.React Native之了解 1.1 Native開(kāi)發(fā)優(yōu)勢(shì): Native的原生控...
    兵兵哥哥閱讀 1,105評(píng)論 0 1
  • React Native 1.React Native之了解 1.1 Native開(kāi)發(fā)優(yōu)勢(shì): Native的原生控...
    兵兵哥哥閱讀 1,203評(píng)論 0 0
  • 青陽(yáng)二三月,柳青桃復(fù)紅。 女人把頭靠著男人的肩,暖風(fēng)熏得人醉。男人身上好聞的氣味也讓人沉醉。 沿岸桃花開(kāi)得艷。游人...
    銘玥詠全閱讀 315評(píng)論 0 1