如何解决为什么我的单位列表在过滤时不再次呈现我的组件?
我有一个平面列表,顶部带有搜索组件:
[
{
"Classification": "spark-env","Properties": {},"Configurations": [
{
"Classification": "export","Properties": {
"MY_ENV": "some-value",}
}
]
}
]
当用户在搜索框中键入内容时,此平面列表将调用函数 searchFilterFunction :
<>
<SearchBar
placeholder="Pesquise por nome,idade ou saldo"
lightTheme
round
autoCapitalize="none"
onChangeText={text => searchFilterFunction(text)}
autoCorrect={false}
value={term}
containerStyle={{ backgroundColor: 'transparent' }}
style={{ borderWidth: 0 }}
/>
<FlatList
data={lotsResult}
keyExtractor={lot => lot.id.toString()}
renderItem={({ item: lot }) => {
const collectDate = new Date(lot.collectDateInMili);
const age = differenceInDays(new Date(),collectDate) + 1;
return (
<Appointment
id={lot.id}
originUserId={lot.originUserId}
aviaries={lot.aviaries}
name={lot.name}
balance={lot.balance}
late={lot.late}
age={age}
collectDateInMili={lot.collectDateInMili}
batchDateInMili={lot.collectDateInMili}
/>
);
}}
/>
</>
用于为此功能搜索数据的批次状态是组件的原始且不可变的状态。 我将结果传递给 lotsResult 并将其呈现在 flatlist 中。 但是,当搜索术语: 28798 时,我创建了一个console.log,并且我的函数返回值的数组,但未在平面列表中呈现。
Console.log返回:
function searchFilterFunction(text: string) {
setTerm(text);
const textData = text.toLowerCase();
const newData = lots.data.filter(item => {
const collectDate = new Date(item.collectDateInMili);
const age = differenceInDays(new Date(),collectDate) + 1;
const itemData = `${item.name.toLowerCase()} ${item.balance
.toString()
.toLowerCase()} ${age.toString().toLowerCase()}`;
return itemData.indexOf(textData) > -1;
});
console.log('searchFilterFunction -> textData',textData);
console.log('searchFilterFunction -> newData',newData);
SetLotsResult(newData);
}
解决方法
在我看来,您好像没有正确调用设置状态挂钩。 (根据您的评论)它定义为setLotsResult
。但是,在您的代码中,您似乎正在调用SetLotsResult(newData)
。
请注意大小写差异。他们应该匹配。
,我验证了当提供给Flatlist的数据发生更改时,我的组件没有以不固定高度为特征。我通过定义最小高度来解决了这个问题。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。