反应钩子使用效果无限循环

时间:2020-05-20 06:40:24

标签: reactjs react-hooks use-effect

下面是我的代码片段。 当我收到我的道具并尝试使用Sate时,即使经过以下数量的解决方案,我仍会收到此infine循环。

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;

1 个答案:

答案 0 :(得分:1)

问题是您在功能组件中定义位置数组,并且每次重新渲染时其引用都会更改,因此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;

或从useEffect中删除position的依赖项

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;