2017-10-20 75 views
0

當然,如果問題有點愚蠢,我們會很抱歉。如何清除SlideTextInput(自定義TextInput組件)中的輸入?

在應用程序中,我開發一個用戶應該能夠刷卡中TextInput。由於的TextInput只聽輕拍我用這個要點:https://gist.github.com/MikeShi42/87b65984f0a31e38d553cc056fcda017 (BTW @邁克爾施感謝一噸)

但是,一旦我改變的TextInput到SlideTextInput清除按鈕停止工作。

clearInput() { 
    this.setState({text: ''}); 
} 

render() { 
    return (
    <Button name='clear' action={this.clearInput} /> 
    <SlideTextInput 
     style={styles.input} 
     ref='input' 
     onChangeText={(text) => this.setState({text: text})} 
     placeholder={this.state.placeholder} 
     value={this.state.text} 
     multiline={true} 
     returnKeyType='done' 
     blurOnSubmit={true} /> 
    ) 
} 

我也試過this.refs.input.setNativeProps({text: ''});,而不是僅僅通過一個新的value道具(應該是 - 並且是 - 滿足正常的TextInput),並調用forceUpdate(),但同樣無濟於事。與原始TextInput組件相比,我在SlideTextInput.js中看不到太多的變化,但是我必須缺少能夠解釋這種不良行爲的東西嗎?

UPD:答案是在年底相當簡單。 SlideTextInput並不像原始TextInput那樣將組件鏈接到其本機對象(​​),而是將它ref'ed爲一個字符串(ref="input")。我改回來了,瞧。

回答

0

答案是在年底相當簡單。 SlideTextInput不是像原來的TextInput那樣將組件鏈接到它的本機對象(ref = {this._setNativeRef}),而是將它ref'ed爲一個字符串(ref =「input」)(這不是關於我的代碼中的道具,它是關於SlideTextInput .js文件本身)。我改回來了,瞧。

0

看代碼似乎值的道具不被髮送到原來的TextInput。它擴展了TextInput,但是它返回的是另一個組件,而不發送價值道具。

嘗試:

this.refs.input.setText(''); 
+0

嘿,謝謝你的回答。 SlideTextInput實際上有一個道具'text = {this.props.value}',我剛剛發現了另外一件事情 - 如果我從另一個屏幕返回到屏幕,則清除按鈕可以工作(但它與textinput的selectionState無關。 –

+0

是clearInput被解僱實際上呢?如果你添加一個日誌或警報有它執行每一次? – sfratini

+0

哦,是的,那是我檢查的第一件事:)我接着說: {} this.state.text'到頁眉看按鈕是否成功清除this.state.text - 這是,但輸入本身不是。最神奇的是,它實際上清楚,如果你_return_這個屏幕,看看在[截屏(https://d26dzxoao6i3hh.cloudfront.net/items/3G1R3P232R1J473A1D3Q/clear-button-behaviour.mp4) –