onCompleted обратный вызов в useMutation не имеет возвращаемых значений - PullRequest
2 голосов
/ 08 января 2020

Я пытаюсь реализовать вход в систему реагировать на родной, используя apollo. В реагирующем собственном приложении

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

// код сокращен.

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);
      }
  });
}

Бэкэнд-сервер работает хорошо. Но я получил сообщение об ошибке в журнале консоли:

    [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

данные не определены. Итак, я попытался { data && console.log(data.signin.token) } Но он ничего не печатает. Я прочитал, что do c говорит "обратный вызов onCompleted для useMutation, который будет вызван после завершения мутации с возвращаемым значением."

Как я могу отладить это? что мне не хватает? Любые идеи? Спасибо!

1 Ответ

2 голосов
/ 08 января 2020

onCompleted передается весь объект данных в качестве первого параметра, поэтому ваша подпись должна выглядеть следующим образом:

onCompleted(data)

или с использованием деструктуризации

onCompleted({ signin })
...