如何创建一个自定义的钩子来获取依赖关系

Ven*_*sky 5 reactjs eslint react-native react-hooks

我正在做一个自定义的钩子,当状态发生变化时,它会带有一个togleg。

您应该能够传递数组中的任何状态。

import { useState, useEffect } from 'react'

const useFlatListUpdate = (dependencies = []) => {
    const [toggle, setToggle] = useState(false)

    useEffect(() => {
        setToggle(t => !t)
    }, [...dependencies])

    return toggle
}

export default useFlatListUpdate
Run Code Online (Sandbox Code Playgroud)

它应该用作

const toggleFlatList = useFlatListUpdate([search, selectedField /*, anything */])
Run Code Online (Sandbox Code Playgroud)

但这给了我以下警告

React Hook useEffect在其依赖项数组中具有一个split元素。这意味着我们不能静态地验证您是否已经传递了正确的依赖项。eslint(react-hooks / exhaustive-deps)

我还有另一种情况不起作用

const useFlatListUpdate = (dependencies = []) => {
    const [toggle, setToggle] = useState(false)

    useEffect(() => {
        setToggle(t => !t)
    }, dependencies)

    return toggle
}
Run Code Online (Sandbox Code Playgroud)

这给了我警告

React Hook useEffect传递了一个非数组文字的依赖项列表。这意味着我们不能静态地验证您是否已经传递了正确的依赖项。eslint(react-hooks / exhaustive-deps)

我如何在没有警告且没有禁用eslint的情况下通过这项工作做到这一点?

cke*_*dar 7

在这种情况下,依赖列表的使用非常特殊。
除了忽略或沉默警告之外,我看不到其他方法。

要消除警告,我们不必eslint完全禁用。
您可以为此特定行禁用此特定规则:

const useFlatListUpdate = (dependencies = []) => {
    const [toggle, setToggle] = useState(false)

    /* eslint-disable react-hooks/exhaustive-deps */
    useEffect(() => {
        setToggle(t => !t)
    }, [...dependencies])

    return toggle
}
Run Code Online (Sandbox Code Playgroud)