我遇到了突变似乎没有发送任何参数的问题。我的突变似乎是正确的,因为我从服务器收到的错误是它没有找到用户而不是语法问题,例如 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
似乎是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}}
这是一个陷阱吗?我不确定。但至少我暂时有一个解决方法。