将参数传递给React Apollo突变

时间:2019-06-18 09:20:30

标签: reactjs graphql apollo react-hooks

我遇到的问题是,突变似乎不发送任何参数。我的变异似乎是正确的,因为我从服务器收到的错误是找不到用户而不是语法问题,例如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={{
    email: "some-valid-email@website.com",
    password: "some-valid-password"
}}

但是,当我从状态传递数据(通过useContext发生)时,它会中断。

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

1 个答案:

答案 0 :(得分:0)

这似乎是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}}

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