【问题标题】:JavaScript/GraphQL add fragments conditionallyJavaScript/GraphQL 有条件地添加片段
【发布时间】:2021-02-16 20:37:11
【问题描述】:

我有一个向 graphQL 端点发送 fetch 请求的 JavaScript 函数。我的目标是根据传递给 JavaScript 函数的参数向我的 graphQL 查询添加一个片段,例如,我的函数如下所示:

const getEvent = async (id, lang) => {
    const data = await fetchAPI(`
        fragment EventFields on Event {
            title
            slug
            date
        }
        fragment BnFields on Event {
            bn {
                content
                subtitle
            }
        }
        query fetchEvent($id: ID!, $idType: EventIdType!) {
            event(id: $id, idType: $idType) {
                ...EventFields
                content
            }
        }
    }
}

如果getEvent 函数的lang 参数等于bn,我想添加BnFields 片段。我知道我可以通过根据lang 参数声明两个单独的查询来实现这一点,但我想知道graphQL 本身是否有更优化的方法来添加基于变量的片段。任何帮助将不胜感激。

【问题讨论】:

标签: javascript graphql


【解决方案1】:

这正是 @include 指令的好处:

query fetchEvent($id: ID!, $idType: EventIdType!, $isBn: Boolean!) {
    event(id: $id, idType: $idType) {
        ...EventFields
        ...BnFields @include(if: $isBn)
        content
    }
}

然后,将isBn: lang === 'bn' 添加到与查询一起传递的变量中。

【讨论】:

    猜你喜欢
    • 2018-04-27
    • 2018-09-29
    • 1970-01-01
    • 1970-01-01
    • 2019-10-02
    • 2015-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多