【发布时间】:2021-10-31 09:03:54
【问题描述】:
问题:在导航栏上,标签应该出现然后保留,但是当我运行代码时,它会不断地从第一个到最后一个移动,比如第一个标签到第二个,第二个到第三个,循环继续永远不会停止。
前端代码(此代码已在返回函数中):
const Navbar = () => {
useEffect(() => {
fetch("/tags", {
headers: {
Accept: "application/json",
"Content-Type": "application/json",
},
})
.then((res) => res.json())
.then((data) => {
setdata(data);
});
});
return (
<>
<div className="bg-1">
<nav className="navbar navbar-expand-lg navbar-dark">
<button
className="navbar-toggler"
type="button"
data-toggle="collapse"
data-target="#navbarSupportedContent"
aria-controls="navbarSupportedContent"
aria-expanded="false"
aria-label="Toggle navigation"
>
<span className="navbar-toggler-icon"></span>
</button>
<div
className="collapse navbar-collapse "
id="navbarSupportedContent"
>
<ul className="navbar-nav ml-auto">
{data.map((cats) => {
return (
<li className="nav-item cats">
<NavLink className="nav-link" to="/c/post">
{cats._id}
</NavLink>
</li>
);
})}
</ul>
</div>
</nav>
</div>
</>
);
};
export default Navbar;
//Link to={`/c/?cat=${cats._id}`}
后端代码:
router.get('/tags', async (req, res) => {
try {
const categories = await Post.aggregate([
{ $project: { categories: 1 } },
{ $unwind: '$categories' },
{ $group: { _id: '$categories', count: { $sum: 1 } } },
{ $sort: { count: -1 } }
]);
res.json(categories);
} catch (error) {
console.log(error);
}
});
【问题讨论】:
-
你在哪里使用了这个
{data.map ....}?添加这个组件。另外,你的API调用/tags的结果是什么,将成功的结果添加到问题中。 -
我看不到任何与 API 调用相关的代码,通过查看代码我可以理解问题所在。尝试添加API调用块@Prateek Nandle
-
useEffect在每次渲染时都运行没有依赖数组,您应该添加一个空的依赖数组来触发useEffect一次 -
您忘记为
useEffect挂钩添加依赖项数组,因此在每次重新渲染时,您的 API 都会被调用,从而导致无限 API 调用。看看上面有完全相同问题的链接 -
谢谢@nima 我忘记在useffect中添加[]
标签: reactjs mongodb express frontend mern