#javascript #reactjs #react-native #expo #react-native-flatlist
Вопрос:
Когда я визуализирую свой плоский список, кажется, что в нем дублируются элементы (у feedCache есть один индекс, и он будет отображать данные для этого индекса дважды). Вот код для плоского списка:
const FeedBody = React.memo(() => {
return (
<FlatList
data={feedCache}
renderItem={({ item }) => {
return (
<FeedPost
item={item}
/>
)
}}
keyExtractor={item => item.id}
/>
)
})
return (
<>
{feedLoaded amp;amp; feedCache amp;amp; feedReturnCache
? <FeedBody />
: <AppLoading />
}
</>
)
В верхней части документа, в эффекте использования, я получаю данные из API и записываю части в feedCache и feedReturnCache. Как только это завершится, для feedLoaded будет установлено значение true, и тело канала предположительно будет отрисовано. Несмотря на это, я убежден, что компонент FeedBody все еще перерисовывается из-за обновлений состояния. Это приводит к дублированию элементов внутри плоского списка. Есть ли способ исправить/предотвратить это?
Любая помощь будет признательна, спасибо.
(Код эффекта использования)
const [feedLoaded, setFeedLoaded] = useState(false)
const [feedCache, setFeedCache] = useState(null)
const [feedReturnCache, setFeedReturnCache] = useState(null)
useEffect(() => {
feedMounted = true
server("POST", "/content/feed", {
token: user.token,
cachePresent: false,
metric: "new"
}, (data, http, error) => {
if (!error) {
const toBeStatefulFeedReturnCache = new Array()
for (let i = 0; i < data.length; i ) {
toBeStatefulFeedReturnCache.push({
id: data[i].id,
read: false
})
if (i 1 === data.length) {
if (feedMounted) {
setFeedCache(data)
setFeedReturnCache(toBeStatefulFeedReturnCache)
setFeedLoaded(true)
}
}
}
} else {
throw error
}
})
return () => {
feedMounted = false
}
}, [])
Ответ №1:
Попробуйте исправить дублирование в массиве с помощью набора
Комментарии:
1. Не могли бы вы подробнее остановиться на этом?
2. Он имеет в виду использование
Set
над массивом3. Сами данные не дублируются, скорее, плоский список дублирует элементы во время выполнения.
4. можете ли вы также показать свои данные с помощью своего кода?