gpt4 book ai didi

javascript - onChange仅在2次文本输入后触发

转载 作者:太空宇宙 更新时间:2023-11-04 15:42:17 24 4
gpt4 key购买 nike

我的“TextInput”有一个奇怪的行为。我正在尝试根据 TextInput 条目过滤 ListView:

export default class SearchTabScreen1 extends Component {
constructor(props) {
super(props);
this.state = {
searchText:'',
data:[]
};
}

setSearchText(event) {
var reset = realm.objects('User');
if (this.state.data !== reset){
this.setState({
data:realm.objects('User')
});

const searchText = event.nativeEvent.text;
this.setState({searchText:searchText});
console.log(this.state.searchText);

var searchString = this.state.searchText;
if(searchString != ""){
let searchResult = realm.objects('User').filtered('name BEGINSWITH[c] $0', searchString);
var filteredData = searchResult;

this.setState({
data : filteredData
});
console.log("FILTERED", filteredData);
}
}
}

render() {
return (
<View style={{flex: 1, padding: 20}}>
<TextInput
ref="recherche"
placeholder="Search"
autoCorrect={true}
returnKeyLabel="search"
underlineColorAndroid="black"
value = {this.state.searchText}
onChange={this.setSearchText.bind(this)}
/>
<ListViewDico
navigator={this.props.navigator}
dataFromParent={this.state.data}
/>
</View>

问题是当我输入“L”时,例如,在 TextInput 中,日志: console.log(this.state.searchText); 不显示任何内容。

只有在我输入第二个字符(无论它是什么)之后,日志才会显示此“L”,依此类推。

我总是在“t+1 条目”处得到回复。

希望得到一些帮助,谢谢。

最佳答案

发生这种情况的原因是 setState 不会立即改变状态,而是需要时间,并且 Javascript 是异步的 console.log() 在状态发生变化之前执行,因此您不会获得更新的值,只有当您下次看到旧值时才执行它。解决方案是在setState回调中调用console.log()

 this.setState({searchText:searchText}, () => {
console.log(this.state.searchText);
});

代码:

setSearchText(event) {
var reset = realm.objects('User');
if (this.state.data !== reset){
this.setState({
data:realm.objects('User')
});

const searchText = event.nativeEvent.text;
this.setState({searchText:searchText}, function() {
console.log(this.state.searchText);
});


var searchString = searchText;
if(searchString != ""){
let searchResult = realm.objects('User').filtered('name BEGINSWITH[c] $0', searchString);
var filteredData = searchResult;

this.setState({
data : filteredData
}, function() {
console.log("FILTERED", filteredData);
});

}
}
}

关于javascript - onChange仅在2次文本输入后触发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43780960/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com