javascript - useEffect 持续触发 GET 请求

标签 javascript reactjs react-hooks use-effect

我正在学习 React 并第一次尝试自己制作一个小项目,但我遇到了 useEffect 的问题.
我正在尝试使用来自后端的信息自动填充表单。我可以让它自动填充,但它会不断发送 GET 请求。这就是我所拥有的:

  useEffect(() => {
      axios
        .get('/admin/edit-product' + location.search)
        .then((res) => {
          const updatedControls = {
            ...controlsState,
            title: {
              ...controlsState.title,
              value: res.data.title,
            },
            image: {
              ...controlsState.image,
              value: res.data.image,
            },
            price: {
              ...controlsState.price,
              value: res.data.price,
            },
            description: {
              ...controlsState.description,
              value: res.data.description,
            },
          };
          setControlsState(updatedControls);
        })
        .catch((err) => console.error(err));
  }, [controlsState, location.search]);
我认为依赖数组应该阻止它连续运行,但我想我错过了其他东西。
不确定是否需要,但这是我原来的状态:
  const [controlsState, setControlsState] = useState({
    title: {
      elementType: 'input',
      elementConfig: {
        type: 'text',
      },
      label: 'Product Title: ',
      value: '',
    },
    image: {
      elementType: 'input',
      elementConfig: {
        type: 'url',
      },
      label: 'Image URL: ',
      value: '',
    },
    price: {
      elementType: 'input',
      elementConfig: {
        type: 'number',
      },
      label: 'Price: ',
      value: '',
    },
    description: {
      elementType: 'textarea',
      elementConfig: {
        name: 'description',
        htmlFor: 'description',
      },
      label: 'Description: ',
      value: '',
    },
  });
location来自 react-router-dom useLocation

最佳答案

您已将 controlsState 作为 useEffect 的依赖项。但是在您的 useEffect 中,您正在使用 setControlsState 来更改 controlsState 的值。并且由于您已将 controlsState 作为依赖项,因此每次其依赖项更改时都会发生 useEffect 。因此它反复发生
如果您希望 useEffect 只运行一次,请将 [] 作为第二个参数:

useEffect(() => { 
    ...your code... 
}, [])

关于javascript - useEffect 持续触发 GET 请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63457699/

相关文章:

javascript - React native——动态添加onPress View

reactjs - 使用默认导出和命名导出在 typescript 中声明模块

reactjs - 这是避免 "Did you accidentally call a React Hook after an early return?"的安全方法吗

reactjs - react useMemo 缺少依赖

reactjs - 使用 React 钩子(Hook)触发具有副作用的事件,例如 onClick() 调用 fetch()

javascript - 在 AngularJS 中,为什么终端自定义指令的行为会随着内置指令而改变?

javascript - 添加了变量值但数组没有被推送

javascript - 点击 nav-element loads/includes new content/file.php into div id ="include"

javascript - 如何根据数组中的值删除对象?

javascript - 在 redux 中使用 reselect 添加选择器