【问题标题】:Flatlist item duplication issueFlatlist项目重复问题
【发布时间】:2021-12-09 22:13:03
【问题描述】:

当我渲染我的平面列表时,它似乎在其中重复了项目(feedCache 有一个索引,它会为这个索引渲染两次数据)。这是平面列表的代码:

const FeedBody = React.memo(() => {
    return (
        <FlatList
            data={feedCache}
            renderItem={({ item }) => {
                return (
                    <FeedPost
                        item={item}
                    />
                )
            }}
            keyExtractor={item => item.id}
        />
    )
})
return (
    <>
        {feedLoaded && feedCache && feedReturnCache
            ? <FeedBody />
            : <AppLoading />
        }
    </>
)

在文档的顶部,在 useEffect 中,我从 API 获取数据并将部分写入 feedCache 和 feedReturnCache。一旦完成,feedLoaded 将设置为 true,并且应该会呈现 feed 正文。尽管如此,我确信 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
    }
}, [])

【问题讨论】:

    标签: javascript reactjs react-native expo react-native-flatlist


    【解决方案1】:

    尝试使用 set 修复数组中的重复项

    【讨论】:

    • 你能扩展一下吗?
    • 他的意思是在数组上使用Set
    • 数据本身没有重复,而是平面列表在运行时复制了项目。
    • 你能用你的代码显示你的数据吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-25
    • 2021-09-19
    • 1970-01-01
    • 1970-01-01
    • 2016-04-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多