【问题标题】:Firing React Apollo mutation on page load在页面加载时触发 React Apollo 突变
【发布时间】:2019-10-15 19:55:29
【问题描述】:

我正在尝试在 react-apollo 应用程序中实现电子邮件验证系统并遇到问题。问题是当用户访问带有验证令牌的链接时,我想在页面加载时触发 GraphQL 突变。当前突变是在单击按钮时触发的,但我希望它在页面加载时发生。

我试图从 render 返回突变,但它使应用程序进入无限循环。

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

如何实现在页面加载时触发此突变?

【问题讨论】:

  • 考虑使用 reac-apollo 的 graphql() 和 compose() 函数,而不是 Mutation 组件或 Query 组件。看看他们here

标签: reactjs react-apollo


【解决方案1】:

你可以这样写而不是写

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

useEffect 的行为与页面加载时一样。

【讨论】:

    【解决方案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);
    

    【讨论】:

    猜你喜欢
    • 2021-10-19
    • 1970-01-01
    • 2011-09-21
    • 2013-12-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-23
    相关资源
    最近更新 更多