Как вы используете useMutation из response-apollo-hook для выполнения удаления мутации?

Я пытаюсь использовать useMutation зацепить от react-apollo-hooks, чтобы выполнить мутацию удаления, но у меня возникают трудности при передаче значения идентификатора сообщения в ловушку мутации в следующем коде:

const Posts = () => {
    const { data, error, loading } = useQuery(GET_POST)
    const onDeleteHandler = useMutation(DELETE_POST, {
        variables: { id }
    })
    if (loading) return <div>...loading</div>
    if (error) return <div>Error</div>

    return data.posts.map(({id, title, body, location, published, author}) => {
        return  (
            <div className="card" key={id}>
                <p>id: {id}</p>
                <p>title: {title}</p>
                <p>body: {body}</p>
                <p>location: {location}</p>
                <p>published: {published}</p>
                <p>author: {author.name}</p>
                <Link to={`/post/${id}/edit`}>
                    Edit
                </Link>
                <button 
                    onClick={onDeleteHandler}>
                    Delete
                </button>
            </div>
        )
    })    
}

Я не могу включить useMutation внутри onClick() свойство, так как ловушка не может быть использована в качестве функции обратного вызова. Я пытался с помощью const inputRef = useRef() и прохождение inputRef.current.value, но продолжал становиться неопределенным.

1 ответ

Решение

От react-apollo-hooks документы:

Вы можете предоставить любые параметры мутации в качестве аргумента хуку useMutation или возвращаемой им функции

Таким образом, вы можете опустить переменные при вызове useMutation:

const onDeleteHandler = useMutation(DELETE_POST)

а затем передать их при вызове обработчика:

onClick={() => onDeleteHandler({ variables: { id } })}>

Я думаю, ты мог бы сделать то же самое с useQuery().

Другие вопросы по тегам