这是我的代码
反应
const EXCHANGE_RATES = gql`
mutation {
signUp(lastName: "Amasia")
}
`;
const HandlerRequest = () => {
const [loading, { data }] = useMutation(EXCHANGE_RATES);
console.log('apollo', data);
return <p>apollo</p>;
};
架构
gql`
extend type Mutation {
signUp(
lastName: String!
): String!
}
`;
解析器
Mutation: {
signUp: async (
_,
{ lastName}
) => {
try {
console.log(lastName)
return lastName;
} catch (error) {
return 'error';
}
},
},
useMutation始终返回未定义的数据,但是在graphql游乐场中正在工作。我在做什么netak?。
答案 0 :(得分:3)
useMutation应该返回一个函数来执行变异。通常,您会将其连接到按钮或其他东西。使用在组件加载时自动执行的突变似乎有些奇怪。
const HandlerRequest = () => {
const [getExchangeRates, { data }] = useMutation(EXCHANGE_RATES);
// Load data if not already loaded.
if (!data) { getExchangeRates(); }
console.log('apollo', data);
return <p>apollo</p>;
};
使用以上内容,您可能会看到两个console.logs。
答案 1 :(得分:0)
使用onCompleted回调并记住传递数据对象:
const [loading, { data }] = useMutation(EXCHANGE_RATES, {
onCompleted: (data) => {
console.log(data);
}
});
答案 2 :(得分:0)
您对 useMutation 的用法不太正确。这是正确的用法。
您还需要执行突变。 data
在那之前将是未定义的。
const SomeComponent = () => {
const [doExchangeRates, { data, loading, error }] = useMutation(
EXCHANGE_RATES,
onCompleted: (data) => { console.log({data}); }
);
return <p onClick={doExchangeRates} >apollo</p>;
};
您可以查看有关 useMutation here 的完整文档。