useMutation 中的 onCompleted 回调没有返回值

fre*_*hme 5 reactjs graphql react-native react-apollo apollo-client

我正在尝试使用 apollo 在 React Native 中实现登录。在反应本机应用程序中

const SIGN_IN = gql`
mutation($username: String!, $password: String!) {
  signin(password: $password, username: $username) {
    user {
      username
    }
    token
  }
}
`;
Run Code Online (Sandbox Code Playgroud)

// 代码已缩写。

function LoginScreen() {
  const [signIn, { loading, error }] = useMutation(SIGN_IN, {
    onCompleted({ data }) {
      if (loading) console.log("Loading.....");
      console.log("Printing data");
      console.log(data.signin.token);
      }
  });
}
Run Code Online (Sandbox Code Playgroud)

后端服务器运行良好。但我在控制台日志中收到错误消息

    [Unhandled promise rejection: TypeError: Cannot read property 'signin' of undefined]

    Stack trace:
    screens/LogInScreen.js:36:6 in useMutation$argument_1.onCompleted
    node_modules/@apollo/react-hooks/lib/react-hooks.cjs.js:635:25 in callOncomplete
Run Code Online (Sandbox Code Playgroud)

数据未定义。 所以我尝试了{ data && console.log(data.signin.token) }但它什么也没打印。我读到文档说“useMutation 的 onCompleted 回调将在突变完成并返回值后被调用”。

我该如何调试这个?我缺少什么?有任何想法吗?

Dan*_*den 4

onCompleted将整个数据对象作为其第一个参数传递,因此您的签名应如下所示:

onCompleted(data)
Run Code Online (Sandbox Code Playgroud)

或使用解构

onCompleted({ signin })
Run Code Online (Sandbox Code Playgroud)