TextInput

TextInput是一個允許用戶在應(yīng)用中通過鍵盤輸入文本的基本組件烁落。本組件的屬性提供了多種特性的配置萍程,譬如自動完成葫录、自動大小寫、占位文字赶熟,以及多種不同的鍵盤類型(如純數(shù)字鍵盤)等等瑰妄。最簡單的用法就是丟一個TextInput到應(yīng)用里,然后訂閱它的onChangeText事件來讀取用戶的輸入映砖。它還有一些其它的事件间坐,譬如onSubmitEditing和onFocus。一個簡單的例子如下:this.setState({text})}? ? value={this.state.text}? />注意有些屬性僅在multiline為true或者為false的時候有效邑退。此外竹宋,當(dāng)multiline=false時,為元素的某一個邊添加邊框樣式(例如:borderBottomColor地技,borderLeftWidth等)將不會生效蜈七。為了能夠?qū)崿F(xiàn)效果你可以使用一個View來包裹TextInput:截圖屬性autoCapitalize enum('none', 'sentences', 'words', 'characters') 控制TextInput是否要自動將特定字符切換為大寫:characters: 所有的字符。words: 每個單詞的第一個字符乓土。sentences: 每句話的第一個字符(默認(rèn))宪潮。none: 不自動切換任何字符為大寫。autoCorrect bool 如果為false趣苏,會關(guān)閉拼寫自動修正狡相。默認(rèn)值是true。autoFocus bool 如果為true食磕,在componentDidMount后會獲得焦點尽棕。默認(rèn)值為false。blurOnSubmit bool 如果為true彬伦,文本框會在提交的時候失焦滔悉。對于單行輸入框默認(rèn)值為true,多行則為false单绑。注意:對于多行輸入框來說回官,如果將blurOnSubmit設(shè)為true,則在按下回車鍵時就會失去焦點同時觸發(fā)onSubmitEditing事件搂橙,而不會換行歉提。defaultValue string 提供一個文本框中的初始值。當(dāng)用戶開始輸入的時候区转,值就可以改變苔巨。在一些簡單的使用情形下,如果你不想用監(jiān)聽消息然后更新value屬性的方法來保持屬性和狀態(tài)同步的時候废离,就可以用defaultValue來代替侄泽。editable bool 如果為false,文本框是不可編輯的蜻韭。默認(rèn)值為true悼尾。keyboardType enum("default", 'numeric', 'email-address', "ascii-capable", 'numbers-and-punctuation', 'url', 'number-pad', 'phone-pad', 'name-phone-pad', 'decimal-pad', 'twitter', 'web-search') 決定彈出的何種軟鍵盤的柿扣,譬如numeric(純數(shù)字鍵盤)。這些值在所有平臺都可用:defaultnumericemail-addressmaxLength number 限制文本框中最多的字符數(shù)诀豁。使用這個屬性而不用JS邏輯去實現(xiàn)窄刘,可以避免閃爍的現(xiàn)象。multiline bool 如果為true舷胜,文本框中可以輸入多行文字。默認(rèn)值為false活翩。onBlur function 當(dāng)文本框失去焦點的時候調(diào)用此回調(diào)函數(shù)烹骨。onChange function 當(dāng)文本框內(nèi)容變化時調(diào)用此回調(diào)函數(shù)。onChangeText function 當(dāng)文本框內(nèi)容變化時調(diào)用此回調(diào)函數(shù)材泄。改變后的文字內(nèi)容會作為參數(shù)傳遞沮焕。onEndEditing function 當(dāng)文本輸入結(jié)束后調(diào)用此回調(diào)函數(shù)。onFocus function 當(dāng)文本框獲得焦點的時候調(diào)用此回調(diào)函數(shù)拉宗。onLayout function 當(dāng)組件掛載或者布局變化的時候調(diào)用峦树,參數(shù)為{x, y, width, height}。onSubmitEditing function 此回調(diào)函數(shù)當(dāng)軟鍵盤的確定/提交按鈕被按下的時候調(diào)用此函數(shù)旦事。如果multiline={true}魁巩,此屬性不可用。placeholder string 如果沒有任何文字輸入姐浮,會顯示此字符串谷遂。placeholderTextColor string 占位字符串顯示的文字顏色。secureTextEntry bool 如果為true卖鲤,文本框會遮住之前輸入的文字肾扰,這樣類似密碼之類的敏感文字可以更加安全。默認(rèn)值為false蛋逾。selectTextOnFocus bool 如果為true集晚,當(dāng)獲得焦點的時候,所有的文字都會被選中区匣。selectionColor string 設(shè)置輸入框高亮?xí)r的顏色(在iOS上還包括光標(biāo))style Text#style 譯注:這意味著本組件繼承了所有Text的樣式偷拔。value string 文本框中的文字內(nèi)容。TextInput是一個受約束的(Controlled)的組件沉颂,意味著如果提供了value屬性条摸,原生值會被強制與value屬性保持一致。在大部分情況下這都工作的很好铸屉,不過有些情況下會導(dǎo)致一些閃爍現(xiàn)象——一個常見的原因就是通過不改變value來阻止用戶進(jìn)行編輯钉蒲。如果你希望阻止用戶輸入,可以考慮設(shè)置editable={false}彻坛;如果你是希望限制輸入的長度顷啼,可以考慮設(shè)置maxLength屬性踏枣,這兩個屬性都不會導(dǎo)致閃爍。iosclearButtonMode enum('never', 'while-editing', 'unless-editing', 'always') 是否要在文本框右側(cè)顯示“清除”按鈕钙蒙。iosclearTextOnFocus bool 如果為true茵瀑,每次開始輸入的時候都會清除文本框的內(nèi)容。iosenablesReturnKeyAutomatically bool 如果為true躬厌,鍵盤會在文本框內(nèi)沒有文字的時候禁用確認(rèn)按鈕马昨。默認(rèn)值為false。ioskeyboardAppearance enum('default', 'light', 'dark') 指定鍵盤的顏色扛施。iosonKeyPress function 當(dāng)一個鍵被按下的時候調(diào)用此回調(diào)鸿捧。被按下的鍵會作為參數(shù)傳遞給回調(diào)函數(shù)。會在onChange之前調(diào)用疙渣。iosreturnKeyType enum('default', 'go', 'google', 'join', 'next', 'route', 'search', 'send', 'yahoo', 'done', 'emergency-call') 決定“確定”按鈕顯示的內(nèi)容匙奴。iosselectionState DocumentSelectionState 參見DocumentSelectionState.js,可以控制一個文檔中哪段文字被選中的狀態(tài)妄荔。androidnumberOfLines number 設(shè)置輸入框的行數(shù)泼菌。當(dāng)multiline設(shè)置為true時使用它,可以占據(jù)對應(yīng)的行數(shù)啦租。androidunderlineColorAndroid string 文本框的下劃線顏色(譯注:如果要去掉文本框的邊框哗伯,請將此屬性設(shè)為透明transparent)。方法isFocused(): boolean 返回值表明當(dāng)前輸入框是否獲得了焦點刷钢。clear() 清空輸入框的內(nèi)容笋颤。例子iOS'use strict';var React = require('react');var ReactNative = require('react-native');var {? Text,? TextInput,? View,? StyleSheet,} = ReactNative;var WithLabel = React.createClass({? render: function() {? ? return ({this.props.label}{this.props.children});? },});var TextEventsExample = React.createClass({? getInitialState: function() {? ? return {? ? ? curText: '',? ? ? prevText: '',? ? ? prev2Text: '',? ? ? prev3Text: '',? ? };? },? updateText: function(text) {? ? this.setState((state) => {? ? ? return {? ? ? ? curText: text,? ? ? ? prevText: state.curText,? ? ? ? prev2Text: state.prevText,? ? ? ? prev3Text: state.prev2Text,? ? ? };? ? });? },? render: function() {? ? return (this.updateText('onFocus')}? ? ? ? ? onBlur={() => this.updateText('onBlur')}? ? ? ? ? onChange={(event) => this.updateText(? ? ? ? ? ? 'onChange text: ' + event.nativeEvent.text? ? ? ? ? )}? ? ? ? ? onEndEditing={(event) => this.updateText(? ? ? ? ? ? 'onEndEditing text: ' + event.nativeEvent.text? ? ? ? ? )}? ? ? ? ? onSubmitEditing={(event) => this.updateText(? ? ? ? ? ? 'onSubmitEditing text: ' + event.nativeEvent.text? ? ? ? ? )}? ? ? ? ? onSelectionChange={(event) => this.updateText(? ? ? ? ? ? 'onSelectionChange range: ' +? ? ? ? ? ? ? event.nativeEvent.selection.start + ',' +? ? ? ? ? ? ? event.nativeEvent.selection.end? ? ? ? ? )}? ? ? ? ? onKeyPress={(event) => {? ? ? ? ? ? this.updateText('onKeyPress key: ' + event.nativeEvent.key);? ? ? ? ? }}? ? ? ? ? style={styles.default}? ? ? ? />{this.state.curText}{'\n'}

(prev: {this.state.prevText}){'\n'}

(prev2: {this.state.prev2Text}){'\n'}

(prev3: {this.state.prev3Text}));? }});class AutoExpandingTextInput extends React.Component {? state: any;? constructor(props) {? ? super(props);? ? this.state = {text: '', height: 0};? }? render() {? ? return ({? ? ? ? ? this.setState({? ? ? ? ? ? text: event.nativeEvent.text,? ? ? ? ? ? height: event.nativeEvent.contentSize.height,? ? ? ? ? });? ? ? ? }}? ? ? ? style={[styles.default, {height: Math.max(35, this.state.height)}]}? ? ? ? value={this.state.text}? ? ? />? ? );? }}class RewriteExample extends React.Component {? state: any;? constructor(props) {? ? super(props);? ? this.state = {text: ''};? }? render() {? ? var limit = 20;? ? var remainder = limit - this.state.text.length;? ? var remainderColor = remainder > 5 ? 'blue' : 'red';? ? return ({? ? ? ? ? ? text = text.replace(/ /g, '_');? ? ? ? ? ? this.setState({text});? ? ? ? ? }}? ? ? ? ? style={styles.default}? ? ? ? ? value={this.state.text}? ? ? ? />{remainder});? }}class RewriteExampleInvalidCharacters extends React.Component {? state: any;? constructor(props) {? ? super(props);? ? this.state = {text: ''};? }? render() {? ? return ({

this.setState({text: text.replace(/\s/g, '')});

}}

style={styles.default}

value={this.state.text}

/>);? }}class TokenizedTextExample extends React.Component {? state: any;? constructor(props) {? ? super(props);? ? this.state = {text: 'Hello #World'};? }? render() {? ? //define delimiter? ? let delimiter = /\s+/;? ? //split string? ? let _text = this.state.text;? ? let token, index, parts = [];? ? while (_text) {? ? ? delimiter.lastIndex = 0;? ? ? token = delimiter.exec(_text);? ? ? if (token === null) {? ? ? ? break;? ? ? }? ? ? index = token.index;? ? ? if (token[0].length === 0) {? ? ? ? index = 1;? ? ? }? ? ? parts.push(_text.substr(0, index));? ? ? parts.push(token[0]);? ? ? index = index + token[0].length;? ? ? _text = _text.slice(index);? ? }? ? parts.push(_text);? ? //highlight hashtags? ? parts = parts.map((text) => {? ? ? if (/^#/.test(text)) {? ? ? ? return{text};? ? ? } else {? ? ? ? return text;? ? ? }? ? });? ? return ({? ? ? ? ? ? this.setState({text});? ? ? ? ? }}>{parts});? }}var BlurOnSubmitExample = React.createClass({? focusNextField(nextField) {? ? this.refs[nextField].focus();? },? render: function() {? ? return (this.focusNextField('2')}? ? ? ? />this.focusNextField('3')}? ? ? ? />this.focusNextField('4')}? ? ? ? />this.focusNextField('5')}? ? ? ? />);? }});var styles = StyleSheet.create({? page: {? ? paddingBottom: 300,? },? default: {? ? height: 26,? ? borderWidth: 0.5,? ? borderColor: '#0f0f0f',? ? flex: 1,? ? fontSize: 13,? ? padding: 4,? },? multiline: {? ? borderWidth: 0.5,? ? borderColor: '#0f0f0f',? ? flex: 1,? ? fontSize: 13,? ? height: 50,? ? padding: 4,? ? marginBottom: 4,? },? multilineWithFontStyles: {? ? color: 'blue',? ? fontWeight: 'bold',? ? fontSize: 18,? ? fontFamily: 'Cochin',? ? height: 60,? },? multilineChild: {? ? width: 50,? ? height: 40,? ? position: 'absolute',? ? right: 5,? ? backgroundColor: 'red',? },? eventLabel: {? ? margin: 3,? ? fontSize: 12,? },? labelContainer: {? ? flexDirection: 'row',? ? marginVertical: 2,? ? flex: 1,? },? label: {? ? width: 115,? ? alignItems: 'flex-end',? ? marginRight: 10,? ? paddingTop: 2,? },? rewriteContainer: {? ? flexDirection: 'row',? ? alignItems: 'center',? },? remainder: {? ? textAlign: 'right',? ? width: 24,? },? hashtag: {? ? color: 'blue',? ? fontWeight: 'bold',? },});exports.displayName = (undefined: ?string);exports.title = '';exports.description = 'Single and multi-line text inputs.';exports.examples = [? {? ? title: 'Auto-focus',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: "Live Re-Write (->? '_') + maxLength",? ? render: function() {? ? ? return;? ? }? },? {? ? title: 'Live Re-Write (no spaces allowed)',? ? render: function() {? ? ? return;? ? }? },? {? ? title: 'Auto-capitalize',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Auto-correct',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Keyboard types',? ? render: function() {? ? ? var keyboardTypes = [? ? ? ? 'default',? ? ? ? 'ascii-capable',? ? ? ? 'numbers-and-punctuation',? ? ? ? 'url',? ? ? ? 'number-pad',? ? ? ? 'phone-pad',? ? ? ? 'name-phone-pad',? ? ? ? 'email-address',? ? ? ? 'decimal-pad',? ? ? ? 'twitter',? ? ? ? 'web-search',? ? ? ? 'numeric',? ? ? ];? ? ? var examples = keyboardTypes.map((type) => {? ? ? ? return ();? ? ? });? ? ? return{examples};? ? }? },? {? ? title: 'Keyboard appearance',? ? render: function() {? ? ? var keyboardAppearance = [? ? ? ? 'default',? ? ? ? 'light',? ? ? ? 'dark',? ? ? ];? ? ? var examples = keyboardAppearance.map((type) => {? ? ? ? return ();? ? ? });? ? ? return{examples};? ? }? },? {? ? title: 'Return key types',? ? render: function() {? ? ? var returnKeyTypes = [? ? ? ? 'default',? ? ? ? 'go',? ? ? ? 'google',? ? ? ? 'join',? ? ? ? 'next',? ? ? ? 'route',? ? ? ? 'search',? ? ? ? 'send',? ? ? ? 'yahoo',? ? ? ? 'done',? ? ? ? 'emergency-call',? ? ? ];? ? ? var examples = returnKeyTypes.map((type) => {? ? ? ? return ();? ? ? });? ? ? return{examples};? ? }? },? {? ? title: 'Enable return key automatically',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Secure text entry',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Event handling',? ? render: function(): ReactElement { return; },? },? {? ? title: 'Colored input text',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Colored highlight/cursor for text input',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Clear button mode',? ? render: function () {? ? ? return ();? ? }? },? {? ? title: 'Clear and select',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Blur on submit',? ? render: function(): ReactElement { return; },? },? {? ? title: 'Multiline blur on submit',? ? render: function() {? ? ? return (alert(event.nativeEvent.text)}

/>);? ? }? },? {? ? title: 'Multiline',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Auto-expanding',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Attributed text',? ? render: function() {? ? ? return;? ? }? },];Android'use strict';var React = require('react');var ReactNative = require('react-native');var {? Text,? TextInput,? View,? StyleSheet,} = ReactNative;var TextEventsExample = React.createClass({? getInitialState: function() {? ? return {? ? ? curText: '',? ? ? prevText: '',? ? ? prev2Text: '',? ? };? },? updateText: function(text) {? ? this.setState((state) => {? ? ? return {? ? ? ? curText: text,? ? ? ? prevText: state.curText,? ? ? ? prev2Text: state.prevText,? ? ? };? ? });? },? render: function() {? ? return (this.updateText('onFocus')}? ? ? ? ? onBlur={() => this.updateText('onBlur')}? ? ? ? ? onChange={(event) => this.updateText(? ? ? ? ? ? 'onChange text: ' + event.nativeEvent.text? ? ? ? ? )}? ? ? ? ? onEndEditing={(event) => this.updateText(? ? ? ? ? ? 'onEndEditing text: ' + event.nativeEvent.text? ? ? ? ? )}? ? ? ? ? onSubmitEditing={(event) => this.updateText(? ? ? ? ? ? 'onSubmitEditing text: ' + event.nativeEvent.text? ? ? ? ? )}? ? ? ? ? style={styles.singleLine}? ? ? ? />{this.state.curText}{'\n'}

(prev: {this.state.prevText}){'\n'}

(prev2: {this.state.prev2Text}));? }});class AutoExpandingTextInput extends React.Component {? constructor(props) {? ? super(props);? ? this.state = {text: '', height: 0};? }? render() {? ? return ({? ? ? ? ? this.setState({? ? ? ? ? ? text: event.nativeEvent.text,? ? ? ? ? ? height: event.nativeEvent.contentSize.height,? ? ? ? ? });? ? ? ? }}? ? ? ? style={[styles.default, {height: Math.max(35, this.state.height)}]}? ? ? ? value={this.state.text}? ? ? />? ? );? }}class RewriteExample extends React.Component {? constructor(props) {? ? super(props);? ? this.state = {text: ''};? }? render() {? ? var limit = 20;? ? var remainder = limit - this.state.text.length;? ? var remainderColor = remainder > 5 ? 'blue' : 'red';? ? return ({? ? ? ? ? ? text = text.replace(/ /g, '_');? ? ? ? ? ? this.setState({text});? ? ? ? ? }}? ? ? ? ? style={styles.default}? ? ? ? ? value={this.state.text}? ? ? ? />{remainder});? }}class TokenizedTextExample extends React.Component {? constructor(props) {? ? super(props);? ? this.state = {text: 'Hello #World'};? }? render() {? ? //define delimiter? ? let delimiter = /\s+/;? ? //split string? ? let _text = this.state.text;? ? let token, index, parts = [];? ? while (_text) {? ? ? delimiter.lastIndex = 0;? ? ? token = delimiter.exec(_text);? ? ? if (token === null) {? ? ? ? break;? ? ? }? ? ? index = token.index;? ? ? if (token[0].length === 0) {? ? ? ? index = 1;? ? ? }? ? ? parts.push(_text.substr(0, index));? ? ? parts.push(token[0]);? ? ? index = index + token[0].length;? ? ? _text = _text.slice(index);? ? }? ? parts.push(_text);? ? //highlight hashtags? ? parts = parts.map((text) => {? ? ? if (/^#/.test(text)) {? ? ? ? return{text};? ? ? } else {? ? ? ? return text;? ? ? }? ? });? ? return ({? ? ? ? ? ? this.setState({text});? ? ? ? ? }}>{parts});? }}var BlurOnSubmitExample = React.createClass({? focusNextField(nextField) {? ? this.refs[nextField].focus();? },? render: function() {? ? return (this.focusNextField('2')}? ? ? ? />this.focusNextField('3')}? ? ? ? />this.focusNextField('4')}? ? ? ? />this.focusNextField('5')}? ? ? ? />);? }});var styles = StyleSheet.create({? multiline: {? ? height: 60,? ? fontSize: 16,? ? padding: 4,? ? marginBottom: 10,? },? eventLabel: {? ? margin: 3,? ? fontSize: 12,? },? singleLine: {? ? fontSize: 16,? ? padding: 4,? },? singleLineWithHeightTextInput: {? ? height: 30,? },? hashtag: {? ? color: 'blue',? ? fontWeight: 'bold',? },});exports.title = '';exports.description = 'Single and multi-line text inputs.';exports.examples = [? {? ? title: 'Auto-focus',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: "Live Re-Write (->? '_')",? ? render: function() {? ? ? return;? ? }? },? {? ? title: 'Auto-capitalize',? ? render: function() {? ? ? var autoCapitalizeTypes = [? ? ? ? 'none',? ? ? ? 'sentences',? ? ? ? 'words',? ? ? ? 'characters',? ? ? ];? ? ? var examples = autoCapitalizeTypes.map((type) => {? ? ? ? return ();? ? ? });? ? ? return{examples};? ? }? },? {? ? title: 'Auto-correct',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Keyboard types',? ? render: function() {? ? ? var keyboardTypes = [? ? ? ? 'default',? ? ? ? 'email-address',? ? ? ? 'numeric',? ? ? ? 'phone-pad',? ? ? ];? ? ? var examples = keyboardTypes.map((type) => {? ? ? ? return ();? ? ? });? ? ? return{examples};? ? }? },? {? ? title: 'Blur on submit',? ? render: function(): ReactElement { return; },? },? {? ? title: 'Event handling',? ? render: function(): ReactElement { return; },? },? {? ? title: 'Colors and text inputs',? ? render: function() {? ? ? return (Darker backgroundColor);? ? }? },? {? ? title: 'Text input, themes and heights',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'fontFamily, fontWeight and fontStyle',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Passwords',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Editable',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Multiline',? ? render: function() {? ? ? return (multiline with children, aligned bottom-right);? ? }? },? {? ? title: 'Fixed number of lines',? ? platform: 'android',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Auto-expanding',? ? render: function() {? ? ? return ();? ? }? },? {? ? title: 'Attributed text',? ? render: function() {? ? ? return;? ? }? },? {? ? title: 'Return key',? ? render: function() {? ? ? var returnKeyTypes = [? ? ? ? 'none',? ? ? ? 'go',? ? ? ? 'search',? ? ? ? 'send',? ? ? ? 'done',? ? ? ? 'previous',? ? ? ? 'next',? ? ? ];? ? ? var returnKeyLabels = [? ? ? ? 'Compile',? ? ? ? 'React Native',? ? ? ];? ? ? var examples = returnKeyTypes.map((type) => {? ? ? ? return ();? ? ? });? ? ? var types = returnKeyLabels.map((type) => {? ? ? ? return ();? ? ? });? ? ? return{examples}{types};? ? }? },];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市内地,隨后出現(xiàn)的幾起案子伴澄,更是在濱河造成了極大的恐慌,老刑警劉巖阱缓,帶你破解...
    沈念sama閱讀 221,198評論 6 514
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件非凌,死亡現(xiàn)場離奇詭異,居然都是意外死亡荆针,警方通過查閱死者的電腦和手機敞嗡,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,334評論 3 398
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來航背,“玉大人喉悴,你說我怎么就攤上這事【撩模” “怎么了箕肃?”我有些...
    開封第一講書人閱讀 167,643評論 0 360
  • 文/不壞的土叔 我叫張陵,是天一觀的道長今魔。 經(jīng)常有香客問我勺像,道長障贸,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 59,495評論 1 296
  • 正文 為了忘掉前任吟宦,我火速辦了婚禮篮洁,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘殃姓。我一直安慰自己袁波,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 68,502評論 6 397
  • 文/花漫 我一把揭開白布辰狡。 她就那樣靜靜地躺著锋叨,像睡著了一般。 火紅的嫁衣襯著肌膚如雪宛篇。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,156評論 1 308
  • 那天薄湿,我揣著相機與錄音叫倍,去河邊找鬼。 笑死豺瘤,一個胖子當(dāng)著我的面吹牛吆倦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播坐求,決...
    沈念sama閱讀 40,743評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼蚕泽,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了桥嗤?” 一聲冷哼從身側(cè)響起须妻,我...
    開封第一講書人閱讀 39,659評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎泛领,沒想到半個月后荒吏,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,200評論 1 319
  • 正文 獨居荒郊野嶺守林人離奇死亡渊鞋,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,282評論 3 340
  • 正文 我和宋清朗相戀三年绰更,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锡宋。...
    茶點故事閱讀 40,424評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡儡湾,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出执俩,到底是詐尸還是另有隱情徐钠,我是刑警寧澤,帶...
    沈念sama閱讀 36,107評論 5 349
  • 正文 年R本政府宣布奠滑,位于F島的核電站丹皱,受9級特大地震影響妒穴,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜摊崭,卻給世界環(huán)境...
    茶點故事閱讀 41,789評論 3 333
  • 文/蒙蒙 一讼油、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧呢簸,春花似錦矮台、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,264評論 0 23
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至蛤迎,卻和暖如春确虱,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背替裆。 一陣腳步聲響...
    開封第一講書人閱讀 33,390評論 1 271
  • 我被黑心中介騙來泰國打工校辩, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人辆童。 一個月前我還...
    沈念sama閱讀 48,798評論 3 376
  • 正文 我出身青樓宜咒,卻偏偏與公主長得像,于是被迫代替她去往敵國和親把鉴。 傳聞我的和親對象是個殘疾皇子故黑,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,435評論 2 359

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

  • 現(xiàn)在最熱門的前端框架,毫無疑問是 React 庭砍。上周场晶,基于 React 的 React Native 發(fā)布,結(jié)果一...
    sakura_L閱讀 432評論 0 0
  • It's a common pattern in React to wrap a component in an ...
    jplyue閱讀 3,275評論 0 2
  • 原教程內(nèi)容詳見精益 React 學(xué)習(xí)指南逗威,這只是我在學(xué)習(xí)過程中的一些閱讀筆記峰搪,個人覺得該教程講解深入淺出,比目前大...
    leonaxiong閱讀 2,842評論 1 18
  • 你給簡書找bug凯旭,簡書給你送好禮概耻。即日起,參與簡書公測就有機會獲得簡書提供的精美周邊罐呼! 本期公測版本-簡書andr...
    簡書閱讀 7,436評論 116 50
  • 同昨天文章中所預(yù)想的那樣鞠柄,今天我在宿舍床上“蝸居”了整整一天,看完了《筑巢記》嫉柴。印象中這是我第二次一口氣看完一整本...
    Simmel閱讀 240評論 0 0