Apollo客户端在expo中使用突变,每次调用渲染两次



我有一个带有React Navigation的基本expo应用程序。在顶部的function Navigation中,我正在启动对Apollo服务器的useMutation调用,如下所示:

import { callToServer, useMutation } from '../graphQL';
function Navigation() {
console.log("RENDERED");
const [call] = useMutation(callToServer);
call({ variables: { uid: 'xyz', phoneNumber: '123' } });
...

我的GraphQL设置如下:

import {
ApolloClient,
createHttpLink,
InMemoryCache,
useMutation,
} from '@apollo/client';
import { onError } from '@apollo/client/link/error';
import { callToServer } from './authAPI';
const cache = new InMemoryCache();
const httpLink = createHttpLink({
uri: `XXXXXXX/my-app/us-central1/graphql`,
});
const errorLink = onError(({ graphQLErrors, networkError }) => {
...
});
const client = new ApolloClient({
cache,
link: errorLink.concat(httpLink),
});
export {
useMutation,
callToServer,
};
export default client;

我想澄清一下,我从客户端设置中删除了httpLink,并且每次调用仍然会得到两个渲染。我可以在控制台中看到console.log("RENDERED")打印了三次。应用程序加载时一次(正常(,useMutation调用后两次(不正常?(

这是怎么回事?为什么每个useMutation调用都会重新渲染两次react?我该如何避免它?

更新

我做了进一步的挖掘,似乎useMutation确实会导致应用程序呈现两次——一次是在发送请求时,一次是收到响应时。我不确定我是否喜欢这种似乎无法禁用的默认行为。为什么不让我们决定是否要重新渲染应用程序?如果有人能提供更多的见解,我很乐意听到。

也许为时已晚,也许您已经找到了解决方案,但仍然。。。

正如我所看到的,您不需要从上面代码中的突变返回数据。在这种情况下,您可以使用useMutation选项";ignoreResults";并将其设置为"0";真";。因此突变不会更新";数据";属性,并且不会导致任何渲染。

最新更新