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:更新缓存查询的结果的主要内容,如果未能解决你的问题,请参考以下文章

SQL 排序

记录pageHelper分页orderby的坑

在sql语句中,ORDERBY子句的功能是()

oracle分页详解(rownum与orderby)

第三章 集合与排序 3-4 对查询结果进行排序

MYSQL结果排序分页查询聚合函数