【问题标题】:When using a setState function from useState as argument in useEffect why it is not required to write a callBack当使用 useState 中的 setState 函数作为 useEffect 中的参数时,为什么不需要编写回调
【发布时间】:2020-07-13 21:19:06
【问题描述】:

当我在 useEffect 参数中使用我的组件中的函数时,据我所知,我应该编写一个 callBack 以便记住它并用作 useEffect 的依赖项,否则会出现警告,但是当我使用 setState 的 useState 为什么会有无需编写回调。它是默认记住的吗? useState 的 setState 与我的组件中的方法有何不同?

const [username, setUsername] = useState(undefined)
const [password, setPassword] = useState(undefined)

const onSuccessfulLogin  = useCallback((data, token) => {
    setUsername('')
    setPassword('')
    setUser(data)
    setAuth(token)
},[setUsername, setPassword])

useEffect(() => {
    onSuccessfulLogin()
},[onSuccessfulLogin])

【问题讨论】:

    标签: javascript reactjs


    【解决方案1】:

    当我使用useState的setState时为什么不需要写回调

    因为它保证在渲染之间返回一个稳定的函数引用。 hooks lint 插件的规则知道这一点,所以它可以让你从依赖数组中省略它。

    【讨论】:

    • 但是当 setter 作为 props 从 parent 传递时,会出现缺少依赖项的警告,在这种情况下我应该写显式回调还是可以直接使用 props 中的 setter?
    • 无需将 useCallback 包裹在单个状态设置器周围。状态设置器已经是一个稳定的参考。 lint 插件并不能总是分辨什么是稳定的,什么不是,所以如果你比插件更清楚,可以使用// eslint-disable-next-line react-hooks/exhaustive-deps 禁用插件。
    猜你喜欢
    • 1970-01-01
    • 2018-01-03
    • 2023-01-17
    • 2022-01-06
    • 1970-01-01
    • 2014-07-25
    • 2021-11-06
    • 2020-07-15
    • 2021-05-29
    相关资源
    最近更新 更多