javascript - 从 useEffect 返回的数据无限滚动/错误
问题描述
我在一个基本的无限滚动上工作,我在从Items
.
它适用于我的useEffect
电话,我console.log
它,一切都在那里。但是随后将值设置为 1... 为什么?谢谢
const List = () => {
const [Items, setItems] = useState([]);
const [fetchData, setFetchData] = useState((listSize > lot) ? lot : listSize);
const [Limits, setLimits] = useState(true);
console.log(Items); // got empty first time and then 1
useEffect(() => {
let nvxPic = list.slice(fetchData - lot, fetchData);
setItems(Items.push(nvxPic.map((image, key) => (
<img key={key} src={`Images/${image}`} alt="" />
))))
console.log(Items); // got my array
}, [fetchData])
const fetchMoreData = async () => {
if (fetchData + lot > listSize) {
setFetchData(listSize);
setLimits(false);
}
else
setFetchData(fetchData + lot);
};
return (
<div>
<InfiniteScroll
dataLength={fetchData}
next={fetchMoreData}
hasMore={Limits}
loader={<h4>Loading...</h4>}
endMessage={
<p style={{ textAlign: "center" }}>
<b>Done</b>
</p>
}
>
{Items}
</InfiniteScroll>
</div>
);
};
解决方案
由于这部分代码,问题正在发生:
setItems(Items.push(nvxPic.map((image, key) => (
<img key={key} src={`Images/${image}`} alt="" />
)));
该代码将Items
变量的值设置为返回的新数组的长度push
。这就是为什么你得到1
变量的值。
正如文档Array.prototype.push()所述:
push() 方法将一个或多个元素添加到数组的末尾,并返回数组的新长度。
map
为您创建一个新数组,我想您无论如何都不需要推送它。
从Array.prototype.map()文档中,您可以看到:
map() 方法创建一个新数组,其结果是在调用数组中的每个元素上调用提供的函数。
我认为解决方案是,只需push
从代码中删除部分:
setItems(nvxPic.map((image, key) => (
<img key={key} src={`Images/${image}`} alt="" />
));
所以map
返回新数组然后setItems
更新Items
变量的值,你不需要用push
.
推荐阅读
- amazon-web-services - AWS SES - Nodemailer - transporter.sendEmail 不是函数
- datatables - 数据表脚本 DOM
- php - Soapclient 和用户 Kerberos 身份验证的转移
- java - 在字符串的开头添加 BOM
- python - 将参数传递给 wsadmin 中的 jython 脚本
- xml - 如何将 Xml 输出到文件?
- ruby-on-rails - mcmire/active_campaign - “联系电子邮件地址无效。”
- graphql - 无法在 GraphQL 查询定义中抽象出解析函数
- python - request.Request 删除 gitlab 分支不起作用,但可以使用 curl DELETE
- ios - 以编程方式在 loginVC 后嵌入自定义标签栏控制器