reactjs - 在功能 react 组件中无限重新渲染

标签 reactjs asynchronous axios infinite-loop use-effect

我正在尝试设置变量“工作区”的状态,但是当我用控制台记录数据时,我得到了一个无限循环。我在 useEffect() 内部调用 axios“get”函数,并在这个循环之外调用控制台日志记录,所以我不知道是什么触发了所有重新渲染。我没有在 this question 中找到我的具体问题的答案。 .这是我的代码:

function WorkspaceDynamic({ match }) {
  const [proposals, setProposals] = useState([{}]);
  useEffect(() => {
    getItems();
  });

  const getItems = async () => {
    const proposalsList = await axios.get(
      "http://localhost:5000/api/proposals"
    );
    setProposals(proposalsList.data);
  };

  const [workspace, setWorkspace] = useState({});
  function findWorkspace() {
    proposals.map((workspace) => {
      if (workspace._id === match.params.id) {
        setWorkspace(workspace);
      }
    });
  }

有没有人看到可能导致重新渲染的原因?谢谢!

最佳答案

效果 Hook 在每个渲染周期运行,没有依赖数组的 Hook 将在每个渲染周期执行其回调。如果效果回调更新状态,即 proposals,则另一个渲染周期将入队,从而创建渲染循环。

如果你只想在组件挂载时运行一次效果,那么使用一个空的依赖数组。

useEffect(() => {
  getItems();
}, []);

如果您希望它仅在特定时间运行,例如匹配参数更新,则在数组中包含一个依赖项。

useEffect(() => {
  getItems();
}, [match]);

关于reactjs - 在功能 react 组件中无限重新渲染,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64017056/

相关文章:

reactjs - 使用axios直接上传图片到cloudinary

javascript - `$axios`在Nuxt.js的Vuex实用函数中的使用方法

reactjs - React Router v6 防止使用 <Outlet/> 重新渲染路由周围的组件

reactjs - 将 React 应用程序部署到 Github 用户页面

javascript - 异步等待 promise 所有与存储在变量中

javascript - 如何等待一组异步回调函数?

rest - 尝试授权 Axios get 请求时出错

javascript - 如何在 react-router Route 中从 onChange 调用 dispatch?

javascript - React-router 在transitionTo 上意外重新加载(Chrome)

java - 异步 REST 客户端