0

我已经开始在 React 中使用自定义钩子,创建以下内容:

export function useLazyHook({ onCompleted, onError }) {
    // Apollo
    const client = useApolloClient()

    /**
     * Use State
     */

    const [loading, setLoading] = useState(false)
    const [data, setData] = useState(null)
    const [error, setError] = useState(null)

    /**
     * Method
     */

    const CallMe = async ({ input }) => {
        // Loading
        setLoading(true)
        try {
            const data = await client.mutate({
                mutation: MUTATION,
                variables: {
                    Input: input,
                },
            })
            setLoading(false)
            setData(data)
            return { error: null, data: data }
        } catch (error) {
            setError(error)
            if (error.graphQLErrors) {
                setError(error.graphQLErrors[0])
                return { error: error.graphQLErrors[0], data: null }
            }
        }
    }
    // Return
    return [{ loading, data, error }, CallMe]
}

钩子可以通过以下方式使用:

const [{ loading, data, error }, CallMe] = useLazyHook({
    onCompleted(res) {
        console.log(res)
    },
    onError(err) {
        console.log(err)
    },
})

我们可以在声明的变量或 onCompleted 和 onError 中访问加载、数据和错误变量。我们还可以通过以下方式在线访问相同的数据:

const { error, data } = await CallMe({
    input: {},
})
console.log(error)
console.log(data)

以上所有内容都很好,但是,如果我遗漏了什么或做错了什么,那么任何建议都非常受欢迎。

4

0 回答 0