orderBy:更新缓存查询的结果

时间:2018-09-13 11:11:37

标签: react-apollo graphcool

致力于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

1 个答案:

答案 0 :(得分:0)

执行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 */ }
    })
}