我正在使用CREATE TABLE [dbo].[Fact_SalesTransaction]
(
[FactSalesTransactionId] INT IDENTITY (1, 1) NOT NULL,
[DimCustomerId] INT NOT NULL,
[DimSellerId] INT NOT NULL,
[SalesDatetime] DATETIME NULL,
[DimSalesDateId] INT NULL,
[SalesAmount] DECIMAL (28, 2) NULL,
[ETLCreateDate] DATETIME NULL,
);
CREATE CLUSTERED COLUMNSTORE INDEX ccx_Fact_SalesTransaction ON Fact_SalesTransaction;
CREATE UNIQUE INDEX unx_FactSalesTransactionId ON dbo.Fact_SalesTransaction (FactSalesTransactionId);
查询进行无限滚动。它包含变量postsConnection
。
完成upvote突变后,我想after
...像这样
refetchQueries
以上代码给出了错误,因为const upvote = await client.mutate({
mutation: UPVOTE_MUTATION,
variables: {
postId: this.props.post.id
},
refetchQueries: [
{ query: POST_AUTHOR_QUERY }
]
})
接受的变量很少。这是该查询
POST_AUTHOR_QUERY
我不想手动添加变量。变量已存储在缓存中。在使用export const POST_AUTHOR_QUERY = gql`
query POST_AUTHOR_QUERY($authorUsername: String! $orderBy: PostOrderByInput $after: String){
postsAuthorConnection(authorUsername: $authorUsername orderBy: $orderBy after: $after) {
....
}
}
时如何重用它们?
以下是我已阅读的有关此问题的一些资源
答案 0 :(得分:0)
如the issue you linked中所述,您应该能够执行以下操作:
import { getOperationName } from 'apollo-link'
const upvote = await client.mutate({
// other options
refetchQueries={[getOperationName(POST_AUTHOR_QUERY)]}
})
来自docs:
请注意,如果您使用字符串数组调用refetchQueries,则Apollo Client将查找任何先前调用的查询,这些查询的名称与所提供的字符串相同。然后,它将使用其当前变量重新获取这些查询。
getOperationName
只需解析传递给它的文档并从中提取操作名称。当然,您可以自己以字符串的形式提供操作名称,但是这种方式可以避免将来更改操作名称或使用胖手指时出现问题。
答案 1 :(得分:0)
如果您不想引入 apollo-link
,您也可以通过基础 graphql
包获得它(请注意,我使用 optional chaining 是为了方便:
import { getOperationAST } from 'graphql';
const operationName = getOperationAST(POST_AUTHOR_QUERY)?.name?.value;
// Note that this could technically return `undefined`
const upvote = await client.mutate({
mutation: UPVOTE_MUTATION,
variables: {
postId: this.props.post.id
},
refetchQueries: [operationName]
})