Apollo Client,如何从获取所有元素的查询中获取一个元素

时间:2021-06-30 22:31:31

标签: apollo-client react-apollo

我正在使用 Apollo Client 和 React。

问题是如何让 Apollo 意识到 getClass 正在寻找一个元素到 getClasses 的结果中。

例如,我有一个 getClasses 返回的所有类的列表,然后当用户单击链接时,它会显示该类的数据。问题是现在 Apollo 正在发出另一个 httpRequest 来获取缓存中已经存在的数据。

const CLASS_FRAGMENT = gql`
    fragment ClassFields on Class {
        id
        date
        hour
        name
        activity
    }
`;

export const GET_ALL_CLASSES = gql`
    ${CLASS_FRAGMENT}
    query getClasses {
        classes {
            ...ClassFields
        }
    }
`;

export const GET_CLASS = gql`
    ${CLASS_FRAGMENT}
    query getClass($id: ID!) {
        getClasses(id: $id) {
            ...ClassFields
        }
    }
`;

这是 Apollo Client 的配置

const cache = new InMemoryCache({
    typePolicies: {
        Query: {
            fields: {
                groups: {
                    merge(existing = [], incoming) {
                        return incoming;
                    },
                },
                classes: {
                    merge(existing = [], incoming) {
                        return incoming;
                    },
                },
                students: {
                    merge(existing = [], incoming) {
                        return incoming;
                    },
                },
                payments: {
                    merge(existing = [], incoming) {
                        return incoming;
                    },
                },
            },
        },
        Group: {
            keyFields: ["id"],
        },
        Class: {
            keyFields: ["id"],
        },
        Affiliate: {
            keyFields: ["id"],
        },
        Payment: {
            keyField: ["id"],
        },
    },
});

export const useApolloClient = () => {
    return new ApolloClient({
        link: from([errorLink, httpLink]),
        cache,
    });
};

我想到的解决方法是在 getClasses 中添加一个参数,并在需要所有对象时发送一个标志,当我只需要一个类时发送 id。这是最好的方法吗?

谢谢!

0 个答案:

没有答案
相关问题