Запуск мутации React Apollo при загрузке страницы

Я пытаюсь внедрить систему проверки электронной почты в приложении react-apollo и столкнулся с проблемой. Проблема в том, что я хочу запускать мутацию GraphQL при загрузке страницы, когда пользователь посещает ссылку с токеном проверки. В настоящее время мутация запускается при нажатии кнопки, но я хочу, чтобы это произошло при загрузке страницы.

Я попытался вернуть мутацию из render, но это отправило приложение в бесконечный цикл.

return (
            <Mutation
              mutation = {VERIFY_EMAIL_MUTATION}
              variables = {{ id }}
              onCompleted = {() => this.setState({ userVerified: true })}
            >
              {(verifyEmail, { loading, error }) => {
                 verifyEmail();
            }
            </Mutation>

Как я могу реализовать запуск этой мутации при загрузке страницы?

Рассмотрите возможность использования функций graphql() и compose() reac-apollo вместо компонента Mutation или Query Component. Посмотрите их здесь

Caleb Rotich 04.06.2019 17:56
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Массив зависимостей в React
Массив зависимостей в React
Все о массиве Dependency и его связи с useEffect.
4
1
1 071
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

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

import React from "react";
import { compose, graphql } from "react-apollo";

import {
  VERIFY_EMAIL_MUTATION
} from "../GraphqlQueries/ServerQueries";

class YourComponent extends React.Component {
  componentWillMount() {
    this.props.verifyEmail({variables: {email: "your_email", variable2: "variable2" }});
  }

  render() {
    return (
      <React.Fragment>
        Your Render
      </React.Fragment>
    );
  }
}

export default compose(
  graphql(VERIFY_EMAIL_MUTATION, {
    name: "verifyEmail"
  })
)(YourComponent);

compose() больше не доступен в react-apollo 3. Некоторые решения здесь stackoverflow.com/questions/57445294/…

josef 17.01.2021 21:21

Вместо того, чтобы сочинять, вы можете сделать это так

 useEffect(() => {
        MutationName({
            variables: {
                variable1: variable1Value
            }
        });
    }, []);

useEffect ведет себя как при загрузке страницы.

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