react-native - 创建可搜索平面列表时,命中未定义不是对象(this.state.text)
问题描述
我正在尝试创建一个搜索栏来过滤平面列表的数据。在下面的代码中,我创建了一个名称列表并将名称列表传递给 flatlist。然后,我想将搜索栏中的输入传递给 searchFilterFunction 以过滤数据。问题是当我进入页面时,遇到错误“未定义不是对象(评估this.state.text)。想知道这种情况的原因和解决方案。
const DATA = [
{
name: 'Name 1',
}, {
name: 'Name 2',
}, {
name: 'Name 3',
}, {
name: 'Name 4',
}, {
name: 'Name 5',
},
];
export default class NameListView extends React.Component<any, any> {
constructor(props) {
super(props);
this.state = {
loading: false,
text: '',
};
this.searchFilterFunction = this.searchFilterFunction.bind(this);
}
searchFilterFunction (text) {
const newData = DATA.filter(function(item) {
const itemData = `${item.name}`;
const textData = text;
return itemData.indexOf(textData) > -1;
});
this.setState({
text: newData
});
};
renderSeparator(){
return <View style={styles.separator}/>
}
renderHeader() {
return (
<SearchBar
placeholder="Choose Recipient"
lightTheme
round
onChangeText={text => this.searchFilterFunction(text)}
autoCorrect={false}
value={this.state.text}
/>
);
};
render() {
return (
<SafeAreaView>
<View>
<FlatList style={styles.flatList}
data={DATA}
renderItem={({ item }) =>
<ListItem
title={item.name}
chevron={{color : 'black'}}
leftIcon={<FontAwesome name={'user-circle'} size={25} color=
{'#E3E3E3'}/>}
/>
}
keyExtractor={item => item.name}
ItemSeparatorComponent={this.renderSeparator}
ListHeaderComponent={this.renderHeader}
stickyHeaderIndices={[0]}
/>
</View>
</SafeAreaView>
)
}
}
解决方案
由于您正在this
内部访问,renderHeader
因此需要使用正确的范围绑定或调用它。
您可以将调用更改为:
ListHeaderComponent={this.renderHeader.bind(this)}
或类似的东西:
ListHeaderComponent={() => this.renderHeader()}
推荐阅读
- azure-cosmosdb - 如何将数据导入 cosmos db 模拟器
- docker - 是否有用于 dockerized RSK 节点的 docker-compose?
- reactjs - 在 redux sagas 中让 takeEvery 以 action.meta 为条件?
- c - 进行 Bluez 查询时,“lap”应该是什么?
- typescript - TypeScript: Why Object.fromEntries does not accept array of tuple?
- python - 无法使用 tf.saved_model.load() 加载 Tensorflow Lite 模型
- selenium - 在 Selenium 中查找 LinkedIn 工作页面的元素
- swiftui - ActionSheet 在 iPad 上崩溃,而不是在 iPhone 上
- docker - nginx 和 php-fpm podman 之间的通信
- python - 如果熊猫中的多个列中存在值,则查询值的更快方法