reactjs - react hook useEffect 无限循环
问题描述
下面是我的代码片段。当我收到我的道具并尝试使用 Sate 时,即使在以下数量的解决方案之后,我也会收到这个无限循环。
const App = ({ center }) => {
const position = [-1.29008, 36.81987];
const [mapCenter, setMapCenter] = useState();
useEffect(() => {
if (center && center.length > 0) setMapCenter(center);
else setMapCenter(position);
}, [center, position]);
return (<div> </div>)
}
export default App;
解决方案
问题是您在功能组件中定义位置数组,并且它的引用在每次重新渲染时都会更改,因此 useEffect 再次执行。
您可以将位置声明移出组件,因为它是一个常量,例如
const position = [-1.29008, 36.81987];
const App = ({ center }) => {
const [mapCenter, setMapCenter] = useState();
useEffect(() => {
if (center && center.length > 0) setMapCenter(center);
else setMapCenter(position);
}, [center, position]);
return (<div> </div>)
}
export default App;
或者position
从 useEffect中移除依赖
const App = ({ center }) => {
const position = [-1.29008, 36.81987];
const [mapCenter, setMapCenter] = useState();
useEffect(() => {
if (center && center.length > 0) setMapCenter(center);
else setMapCenter(position);
}, [center]);
return (<div> </div>)
}
export default App;
推荐阅读
- php - Symfony 4.1 application redirectes to an external URL in another machine
- mysql - 64 位整数实际上有限制吗?
- javascript - 如何在 ReactJs 中单击单选按钮时显示弹出窗口
- ios - 应用程序在运行 iOS 9.2.1 或更低版本的设备上崩溃(不是 P3 图像)
- android - 如何使用 scenform 获取 Google Measure App 等对象的高度
- java - 如何使用 JSoup 将自定义 HTML 替换为实际的 HTML 标签?
- unix - 使用 ocaml-cohttp Client.post 方法请求 HTTPS 服务器时如何调试 HANDSHAKE_FAILURE?(为什么我会收到这个错误?)
- c# - ASP.NET WebForms - 路由给出“页面未找到错误”
- qt - QNetworkReply 完成的信号槽未在 Windows 10 上发出
- maven - swagger-maven-plugin 没有生成输入对象的定义