orderBy:更新缓存查询的结果
Posted
技术标签:
【中文标题】orderBy:更新缓存查询的结果【英文标题】:orderBy: the results from update cache query 【发布时间】:2019-02-18 02:49:03 【问题描述】:参与一个 react apollo graphcool 项目
我的突变更新工作正常,但是我想过滤结果,结果只在页面刷新时过滤?
查看 cache.writeQuery() 文档说获取查询并连接到该查询,所以我猜这就是它不过滤的原因。以后有什么可以查询的吗?
这里是我的 CreatePost 组件中的代码
import React from 'react';
import gql from "graphql-tag";
import Mutation from "react-apollo";
const GET_POSTS = gql`
allPosts(orderBy: createdAt_DESC)
id
title
content
`;
const CREATE_POST = gql`
mutation createPost($title: String!, $content: String!)
createPost(title: $title, content: $content)
id
title
content
`;
const udpateCache = (cache, data: createPost ) =>
const allPosts = cache.readQuery( query: GET_POSTS );
cache.writeQuery(
query: GET_POSTS,
data: allPosts: allPosts.concat([createPost])
)
const CreatePost = () =>
//vars for the input refs
let titleInput
let contentInput
return (
<Mutation
mutation=CREATE_POST
update=udpateCache
>
createPost => ( //##form and onSubmit ##// )
</Mutation>
)
export default CreatePost
【问题讨论】:
您能否澄清一下您的预期过滤?使用 GraphQL 来控制您的过滤器需要跨多个堆栈进行更改 “过滤”实际上是 orderBy:这是在 gql 查询中并被发送到 graphcool。查询和 orderBy 在页面加载时起作用,但在突变和 update= 之后不起作用 【参考方案1】:当您执行 writeQuery 时,您还需要传入任何使用的变量,以确保您从缓存中接收到相同的信息。
const udpateCache = (cache, data: createPost ) =>
const allPosts = cache.readQuery( query: GET_POSTS );
cache.writeQuery(
query: GET_POSTS,
data: allPosts: allPosts.concat([createPost]) ,
variables: orderBy: /* input */
)
【讨论】:
谢谢,我确实尝试过,但它不起作用,因为 proxy.writeQuery( query, data ); 中只允许两个 args; apollographql.com/docs/react/advanced/… orderBy 已经在 'GET_POSTS' 查询中 我继续使用正在工作的 refetchQueries,但我想找到一个解决方案而无需发送请求 ***.com/questions/51695337/…以上是关于orderBy:更新缓存查询的结果的主要内容,如果未能解决你的问题,请参考以下文章