[英]How to change state of FlatList item after rendered without refreshing other item on React Native
There is a problem that all item refresh when selectedIndex
changed because the selectedIndex
is dependency of renderItem
.有一个问题,当
selectedIndex
更改时所有项目都刷新,因为selectedIndex
是renderItem
的依赖项。 I want to manage selectedIndex to globally cause just one or none item's detail have to enabled.我想管理 selectedIndex 以在全局范围内导致只启用一个项目的详细信息或不启用任何项目的详细信息。 Is there any solution to refresh just one item that
selectedIndex
pointed?有什么解决方案可以只刷新
selectedIndex
指向的一项吗?
Here is my code这是我的代码
interface ItemType {
title: string;
detail: string;
}
const FlatListTestScreen = () => {
const [selectedIndex, setSelectedIndex] = useState<number | null>(null);
const data: ItemType[] = [
{ title: 'title1', detail: 'detail1' },
{ title: 'title2', detail: 'detail2' },
{ title: 'title3', detail: 'detail3' },
{ title: 'title4', detail: 'detail4' },
{ title: 'title5', detail: 'detail5' },
];
const renderItem = useCallback<ListRenderItem<ItemType>>(
({ item, index }) => {
console.log('render', index, selectedIndex === index);
return (
<Pressable
onPress={() => {
console.log('press', index);
setSelectedIndex(index === selectedIndex ? null : index);
}}>
<Text>{item.title}</Text>
{selectedIndex === index && <Text>{item.detail}</Text>}
</Pressable>
);
},
[selectedIndex],
);
return <FlatList data={data} renderItem={renderItem} />;
};
LOG render 0 false
LOG render 1 false
LOG render 2 false
LOG render 3 false
LOG render 4 false
LOG press 1
LOG render 0 false <- unnecessary render
LOG render 1 true
LOG render 2 false <- unnecessary render
LOG render 3 false <- unnecessary render
LOG render 4 false <- unnecessary render
Check my answer about FlatList optimization here: react native flatlist with and without pagination在这里查看我关于 FlatList 优化的回答: react native flatlist with and without pagination
In your case, you need to provide keyExtractor
在您的情况下,您需要提供
keyExtractor
Also a very useful article from the official documentation: https://reactnative.dev/docs/optimizing-flatlist-configuration还有一篇来自官方文档的非常有用的文章: https://reactnative.dev/docs/optimizing-flatlist-configuration
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.