我有一张从 Api 获得的卡片列表。卡片是用户在上一个选项卡上选择的产品。当用户向下滚动页面时,它们应该被加载。一切正常。但是如果用户滚动到最后并更新页面表情卡就会出现。
因此,我有一个主要组件,它从本地存储(用户选择的产品)中获取密钥并将密钥逐个发送到另一个组件。这个组件检查,如果有这个key的卡是可见的,通过这个key向Api发出请求。如果我滚动到最后并更新页面,我会看到空卡片。此外,在网络中,我看到 Api 请求仅针对前四张卡。但不是最后四个。
这是主要组件,将密钥发送到另一个组件。
常量 productsKeys = JSON.parse(localStorage.getItem(storageKey) ?? "[]");
const posts = productsKeys.map((key, index) => {
return <MyListPosts key={key} productsKey={key} index={index} />;
});
这是另一个发送 Api 请求的组件
class MyListPosts extends Component {
viewStateChange = (InView) => {
if (InView) {
//if the card is visible, the key is transfered to the async request
this.props.productsInList(this.props.productsKey);
}
};
render() {
const { productsKey, classes, index, productsInMyList, skeletonLoading } =
this.props;
const products = productsInMyList[index] ?? productsInMyList;
return (
<InView onChange={this.viewStateChange}>
<div>
<Card component="nav" className={classes.myListCard}>
{skeletonLoading ? (
<SkeletonInList />
) : (
<>
<Typography>{products.name}</Typography>
<Typography>{products.price} price</Typography>
<Button onClick={() => this.deleteItem(products.key)}>
Done
</Button>
</>
)}
</Card>
</div>
</InView>
);
}
}