2017-05-18 39 views
1

我想使用文本輸入來過濾ViewList,但它似乎是因爲'文本'的初始狀態是「」,它總是以某種方式每次循環一類東西它可以追溯到「」刪除所有類型React native.-使用setState不會改變文本中的道具輸入

過濾功能發生

filterSearch (texto) { 
 

 
    const newData = this.Data.filter((item) => { 
 
    const itemData = item.nombre.toUpperCase() 
 
    const textData = this.texto.toUpperCase() 
 
    return itemData.indexOf(textData) > -1 
 
    }) 
 

 
    this.setState({ 
 
    dataSource: this.state.dataSource.cloneWithRows(newData), 
 
    text: texto 
 
    }) 
 
}

,並從在textInput

稱爲

<TextInput 
 
    style={styles.busqueda} 
 
    placeholder= 'Buscar' 
 
    onChangeText={(text) => this.filterSearch.bind(text)} 
 
    value={this.state.text} 
 
> 
 
</TextInput>

好像filterSearch心不是被調用的正確方法...

+1

你傳遞一個函數來** ** onChangeText將TextInput的屬性,返回另一個(綁定)函數與**這** ** propery設置爲**文本**。你想將** onChangedText **設置爲像'this.filterSearch.bind(this)' – fardjad

回答

0

有2種變化,你需要做:

1/使用正確的語法來執行你的函數

onChangeText={(text) => this.filterSearch(text)} 

其實,onChangeText功能是詞彙綁定到組件已經(通過使用() => {}

2/也需要將filterSearch功能也綁定到反應組件上,那麼您可以在其中使用this(通過以下任一方式):

a)使用的詞彙綁定:

filterSearch = (texto) => { 
    //... 
} 

b)連接在你的構造函數:

constructor(props) { 
    super(props); 
    // ... 
    this.filterSearch = this.filterSearch.bind(this); 
} 
+0

非常感謝,這似乎工作! –

+0

我很高興你有它的工作,如果是這樣,請考慮upvote以及接受我的答案。有關進一步的問題,請在這裏發帖,我們將盡力找到解決方案,謝謝^ * – thinhvo0108

0

onChangeText={(text) => this.filterSearch(text)}

onChangeText={this.filterSearch.bind(this)}

+0

**從複審隊列**:我可以請求你在源代碼中添加一些上下文。僅有代碼的答案很難理解。如果您可以在帖子中添加更多信息,它可以幫助提問者和未來的讀者。 – RBT