将参数传递给 React Apollo 突变

Posted

技术标签:

【中文标题】将参数传递给 React Apollo 突变【英文标题】:Passing argument to React Apollo mutation 【发布时间】:2019-10-31 21:37:00 【问题描述】:

我遇到了一个突变似乎没有发送任何参数的问题。我的突变似乎是正确的,因为我从服务器收到的错误是它没有找到用户,而不是语法问题,例如400.

export const LOGIN = gql`
    mutation signIn($email: String!, $password: String!)
        signIn(login: $email, password: $password) 
            token
        
    
`;

我已确认变量在本地状态下是正确的。我还确认通过 Apollo DevTools 发送凭据会返回正确的令牌。这是突变的相关位。

<Mutation
    mutation=LOGIN
    variables=
        email: state.auth.email,
        password: state.auth.password
    
    onError=(e) => 
        console.log(state.auth); // to confirm the state data is correct
        console.log(e);
    
    update=(store,  data ) => 
        dispatch(
            type: 'login',
            value: data.token
        )
    
>

在这一点上,我感到很沮丧和沮丧。任何帮助表示赞赏。

编辑 - 这似乎比我预期的要奇怪。如果我将这些值硬编码到突变的 variables 参数中,它就可以正常工作。

variables=
    email: "some-valid-email@website.com",
    password: "some-valid-password"

然而,当我通过 useContext 从 state 中传递数据时,它会中断。

const context = React.useContext(AppContext);
console.log(context.auth.email, context.auth.password); // logs the same valid email and password

【问题讨论】:

【参考方案1】:

这似乎是 Apollo 和 React.useContext(或 useReducer)的问题

如果我有如下上下文:

const context = React.useContext(AppContext);

然后我将上下文(包含电子邮件/密码)传递给 GraphQL 变量,例如:

        variables=context.auth

...它有效。

但是单独实例化变量似乎不起作用。

不起作用:

let email = context.auth.email
let password = context.auth.password

variables=email, password

这是一个陷阱吗?我不确定。但至少我暂时有一个解决方法。

【讨论】:

以上是关于将参数传递给 React Apollo 突变的主要内容,如果未能解决你的问题,请参考以下文章

如何将 Apollo 数据和 React Router 4 url​​ 参数传递给我的组件

将参数传递给 apollo 中的查询失败

如何将参数传递给 apollo 中的查询方法?

如何将具有多个对象的状态数组作为参数传递给graphql突变?

Apollo Server:将参数传递给嵌套解析器

Apollo Client Angular:如何将从查询中获得的数据作为参数传递给graphql中的另一个查询?