Как правильно выполнить рефакторинг и вызвать рефакторированный хук? - PullRequest
1 голос
/ 15 января 2020

В настоящее время я использую перехватчики Apact React для аутентификации GraphQL. Я хочу реорганизовать мутацию, чтобы я мог использовать ее для всех различных имен входа, таких как Google, Facebook, Twitter, OAuth и т. Д. c.

import { useMutation } from '@apollo/react-hooks'
import { CREATE_POST_MUTATION } from '../../graphql/mutation'

const [createPost, { loading }] = useMutation(CREATE_POST_MUTATION, {
    onCompleted: data => {
        navigation.navigate("StatusModal", {
            status: "postingSuccess",
            screen: "Posting",
            data,
        })
    },
    onError: data => {
        navigation.navigate("StatusModal", {
            status: "postingError",
            screen: "Posting",
        })
    },
})

const createPostHandler = async () => {
    const { title, price, description, address } = value && value

    try {
        await createPost({
            variables: {
                title,
                body: description,
                price: Number(price),
                location: location.toString(),
                address,
            }
        })
    } catch (err) {
        throw new Error(err)
        navigation.navigate("StatusModal", {
            status: "postingError",
            screen: "Posting",
        })
    }
}

export { createPostHandler as default }

Вызов приведенного выше кода показывает ошибку, что перехватчики React могут вызываться только внутри тела функционального компонента. Как мне сделать это многоразовым?

1 Ответ

1 голос
/ 16 января 2020

Хуки работают (могут быть выполнены) только в «потоке рендеринга» функционального компонента, вы не можете запустить в другом контексте.

Для повторного использования вы можете определить функцию, содержащую useMutation во внешнем файле / экспортированную функцию, и вызвать / запустить ее во многих функциональных компонентах.

Может быть, вы ищете пользовательские хуки?

...