React-native 的坑 之TextInput value屬性

項(xiàng)目背景

需要做一個(gè)Listview 每個(gè)條目都有一個(gè)輸入框,然后默認(rèn)的不可以編輯,旁邊有個(gè)編輯鍵,點(diǎn)擊的話就能編輯


<TextInput style={styles.label_name} editable={this.state.rowData.isEdit} multiline={false} autoFocus={false} maxLength={10} numberOfLines={1} blurOnSubmit={true} value={this.props.model.name} onSubmitEditing={()=>this.props.onSubmitEdit(this.state.rowData)} underlineColorAndroid={'transparent'}>{this.state.rowData.name}</TextInput>

然后在submit 函數(shù)類著這樣寫(xiě)

submit(){ this.setState({ .....//省略,其實(shí)重繪之后 就會(huì)設(shè)置成你編輯的文字 }); }

但是問(wèn)題來(lái)了,文本框雖然在可編輯的情況下但是一直不能輸入文字,而且一直閃爍,引用官方的話說(shuō):

TextInput是一個(gè)受約束的(Controlled)的組件,意味著如果提供了value屬性,原生值會(huì)被強(qiáng)制與value屬性保持一致。在大部分情況下這都工作的很好,不過(guò)有些情況下會(huì)導(dǎo)致一些閃爍現(xiàn)象——一個(gè)常見(jiàn)的原因就是通過(guò)不改變value來(lái)阻止用戶進(jìn)行編輯。如果你希望阻止用戶輸入,可以考慮設(shè)置editable={false};如果你是希望限制輸入的長(zhǎng)度,可以考慮設(shè)置maxLength屬性,這兩個(gè)屬性都不會(huì)導(dǎo)致閃爍

我在這有兩種解決辦法

  1. 用defaultValue 代替
  2. 寫(xiě)成<TextInput>{model.name}</TextInput>這種形式

總結(jié)

react 坑路慢慢修遠(yuǎn)兮,吾將上下而求索

最后編輯于
?著作權(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ù)。

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

  • 一. 簡(jiǎn)介 TextInput是一個(gè)允許用戶在應(yīng)用中通過(guò)鍵盤輸入文本的基本組件。本組件的屬性提供了多種特性的配置,...
    飛奔的小馬閱讀 3,203評(píng)論 0 0
  • Spring Cloud為開(kāi)發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見(jiàn)模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 134,993評(píng)論 19 139
  • http://www.cnblogs.com/Sweet-Candy/p/5695389.html React-N...
    心淡然如水閱讀 4,394評(píng)論 0 0
  • 對(duì)React-Native的學(xué)習(xí),從熟悉基本控件開(kāi)始。 View 屬性方法 序號(hào)名稱屬性O(shè)r方法類型說(shuō)明 1 ac...
    諾花生閱讀 884評(píng)論 0 0
  • TextInput是一個(gè)允許用戶在應(yīng)用中通過(guò)鍵盤輸入文本的基本組件。本組件的屬性提供了多種特性的配置,譬如自動(dòng)完成...
    亭止閱讀 3,294評(píng)論 1 0