javascript - 当我通过时,React useCallback 会做什么。第一个参数中的对象

标签 javascript reactjs react-hooks

我正在修复将 React 与 useEffect 和 useCallback 一起使用时的无限循环。

const fetchApi =useCallback(()=>{
    setIsLoading(true)
      fetchDataFunction({
        resolve(res) {
          setFetchData(fromJS(res))
          setIsLoading(false)
        }
      })
},[param])
useEffect(()=>{
    fetchApi()
},[fetchApi])

它导致了无限循环。但是,如果我更改代码如下所示

const fetchApi = useCallback({
    fetchApiFunc() {
      setIsLoading(true)
      fetchDataFunction({
        resolve(res) {
          setFetchData(fromJS(res))
          setIsLoading(false)
        }
      })
    }
  },[params])
  const { fetchApiFunc } = fetchApi
  useEffect(() => {
    fetchApiFunc()
  }, [fetchApiFunc])

问题已解决。但我仍然不明白当 useCallback 中第一个参数中的对象时它会做什么。

谢谢。

最佳答案

如果您开始使用 React-Hooks,并且您的组件在某个时候可能需要生命周期方法。并且,这就是您开始使用 useEffect() (又名 Effect Hook)的时候。然后,boom!!,您遇到了无限循环行为,并且您不知道为什么会这样。如果发生这种情况,本文将向您解释原因以及如何预防。

问题出在哪里? “useEffect()”将在初始渲染后运行,然后调用“fetchApiFunc()”。 在“fetchApiFunc()”内部,它会在线更新状态“name”,然后触发组件再次重​​新渲染。 结果,“useEffect()”将再次运行并更新状态。接下来,整个过程再次重复,你就陷入了无限循环。

“如果某些值在重新渲染之间没有改变,你可以告诉 React 跳过应用效果。为此,请将数组作为可选的第二个参数传递给 useEffect”,来自官方:https://reactjs.org/docs/hooks-effect.html#tip-optimizing-performance-by-skipping-effects

关于javascript - 当我通过时,React useCallback 会做什么。第一个参数中的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60316969/

相关文章:

采用基数的 JavaScript 函数或方法?

javascript - 在渲染组件之前清除特定的 redux 状态

reactjs - 在 React 中对类属性使用箭头函数。不清楚

reactjs - 了解 React Hooks 'exhaustive-deps' lint 规则

javascript - 正则表达式删除字符串中字符的开头到结尾

javascript - 如何单独显示/隐藏具有相同类名的div?

javascript - Eloquent 地分解一个大类

javascript - ReactJs 在没有事件处理程序的情况下将参数传递给父级

javascript - 无法对对象数组使用数组方法

javascript - 使用 React hooks 实现 shouldComponentUpdate - 仅渲染子组件一次,但在 props 更改时更改 DOM