gpt4 book ai didi

reactjs - 为什么 React hook useEffect 会无休止地运行?

转载 作者:行者123 更新时间:2023-12-02 06:13:19 25 4
gpt4 key购买 nike

我用 create-react-app 创建了一个项目,
我正在尝试 React 钩子(Hook),
在下面的例子中,
句子console.log(articles)无休止地运行:

import React, {useState, useEffect} from "react"
import {InfiniteScroller} from "react-iscroller";
import axios from "axios";
import './index.less';

function ArticleList() {
const [articles, setArticles] = useState([]);

useEffect(() => {
getArticleList().then(res => {
setArticles(res.data.article_list);
console.log(articles);
});
},[articles]);

const getArticleList = params => {
return axios.get('/api/articles', params).then(res => {
return res.data
}, err => {
return Promise.reject(err);
}).catch((error) => {
return Promise.reject(error);
});
};


let renderCell = (item, index) => {
return (
<li key={index} style={{listStyle: "none"}}>
<div>
<span style={{color: "red"}}>{index}</span>
{item.content}
</div>
{item.image ? <img src={item.image}/> : null}
</li>
);
};

let onEnd = () => {
//...
};


return (
<InfiniteScroller
itemAverageHeight={66}
containerHeight={window.innerHeight}
items={articles}
itemKey="id"
onRenderCell={renderCell}
onEnd={onEnd}
/>
);
}

export default ArticleList;

为什么会这样?如何处理?

/image/SHLjh.gif

最佳答案

React useEffect 将第二个参数与其前一个值(在您的情况下为文章)进行比较。但是在 javascript 中比较对象的结果总是错误的,尝试在浏览器控制台中比较 [] === [] 你会得到错误的。所以解决方案不是比较整个对象,而是articles.lenght

const [articles, setArticles] = useState([]);

useEffect(() => {
getArticleList().then(res => {
setArticles(res.data.article_list);
console.log(articles);
});
},[articles.length]);

关于reactjs - 为什么 React hook useEffect 会无休止地运行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53976474/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com