标签: graphql-js

如何在 Apollo graphql 中添加联合类型

我创建了这个问题,以防有人对如何在 Apollo 中添加联合/多态类型感到好奇。希望这会让他们更容易。

在此示例中,我希望响应为 aWorksheetApiError

// typedefs.js
export default [`
  schema {
    query: Query
  }

  type Query {
    worksheet(id: String!): Worksheet | Error
  }

  type Worksheet {
    id: String!
    name String
  }

  type ApiError {
    code: String!
    message: String!
  }
`];

// resolvers.js
export default {
  Query: {
    worksheet(_, args, { loaders }) {
      return loaders.worksheet.get(args.id).catch(() => {
        // ApiError
        return {
          code: '1',
          message: 'test'
        }
      });
    }
  }
};

// Express Server 
import …
Run Code Online (Sandbox Code Playgroud)

apollo graphql-js apollo-server react-apollo graphql-tools

4
推荐指数
1
解决办法
4298
查看次数

替换 Query 对象的 my 字段时缓存数据可能会丢失

这是我的代码

const NewVerificationCode = () => {
  const { loading, error, data = {}, refetch } = useQuery(CONFIRMATION_CODE, {
    skip: true,
    onError: (err) => {},
  });
  console.log(loading, error, data);

  if (loading || error) {
    return <ErrorLoadingHandler {...{ loading, error }} />;
  }

  return (
    <form
      onSubmit={(e) => {
        refetch();
        e.preventDefault();
      }}
    >
      <div>
        <button type="submit" className="signUpbutton">
          {"Send the message again"}
        </button>
      </div>
    </form>
  );
};

const CONFIRMATION_CODE = gql`
  query {
    my {
      sendNewTokenForConfirmation
    }
  }
`;
Run Code Online (Sandbox Code Playgroud)

当我提出请求时,我收到警告

替换 Query …

reactjs graphql-js apollo-client

4
推荐指数
1
解决办法
7430
查看次数

graphql-type-json 导出的 GraphQLJSON 和 GraphQLJSONObject 有什么区别?

来自官方包文档:

GraphQLJSON 可以表示任何 JSON 可序列化的值,包括标量、数组和对象。GraphQLJSONObject 专门表示 JSON 对象,它涵盖了 JSON 标量的许多实际用例。

这听起来有点令人困惑,因为对我来说,这两个定义似乎非常相似。有人可以通过一个例子帮助我更好地理解这一点吗?谢谢期待。

https://www.npmjs.com/package/graphql-type-json

json graphql graphql-js express-graphql graphql-tools

4
推荐指数
1
解决办法
2316
查看次数

React-relay 在片段上无效使用 @refetchable

我正在学习react-relay(v13),并且在使用@refetchable指定分页片段时遇到问题。这是一个非常基本的结构,如果不使用@refetchable,一切都会正常工作(即我可以查询grapql服务器,获取数据,使用Fragment渲染相同的查询/片段而无需分页)

\n

当我在 ProjectsFragment_user 中引入 @refetchable 时,react-relay 编译器给出错误:

\n
[ERROR] \xe2\x9c\x96\xef\xb8\x8e Invalid use of @refetchable on fragment 'ProjectsFragment_user', only supported are fragments on:\n - the Viewer type\n - the Query type\n - the Node interface or types implementing the Node interface\n - @fetchable type\n
Run Code Online (Sandbox Code Playgroud)\n

现在这很令人困惑,因为 ProjectsFragment_user 的查询如下所示:

\n
// Dashboard.js\nexport const dashboardQuery = graphql`\nquery DashboardQuery ($id: ID) {\n  user (id: $id){\n    id \n    name\n    ...ProjectsFragment_user\n  }\n}\n`;\n// then \nconst  data = useLazyLoadQuery(dashboardQuery, {}, {},);\n\n
Run Code Online (Sandbox Code Playgroud)\n
//Projects.js defines fragment\n\nconst {data, loadNext} …
Run Code Online (Sandbox Code Playgroud)

reactjs graphql-js react-relay relaymodern

4
推荐指数
1
解决办法
1560
查看次数

在this.props.relay.setVariables触发fetch之后加载指标?

我使用react-router-relay并在我的一条路线中有一个下拉列表.

现在我从该下拉列表中选择一个不同的值 - 这将调用this.props.relay.setVariables哪个将根据此变量获取一些数据.此数据将显示在当前路径中的图表组件中.

如何提供回调或某些东西,以便知道当前组件现在正在获取数据/现在获取数据?

我需要这个能够在图表组件的顶部显示加载指示器.

我想我不能用react-router-relay它,因为它只能让我显示一个加载指示器而不是我当前的路线 - 但我想在当前路线中显示加载指示器.

请帮忙.

reactjs graphql-js relayjs

3
推荐指数
1
解决办法
1078
查看次数

React Relay:将数据添加到边缘

我将首先介绍我的应用程序:简单的投票应用程序,用户可以在其中创建投票并对其进行投票。简单。
当前,我的graphql模式由用户类型,投票类型和投票类型组成,其中用户和投票通过中继连接与其投票具有一对多关系。投票类型包含对其投票者和民意调查的引用,时间戳和实际投票值。

现在,据我所知,在规范graphql列表上使用连接的优点之一是能够在边缘上存储数据(除了分页等)。我该怎么办?

如果确实可行,我的计划是摆脱投票类型,直接通过连接连接用户及其投票的民意调查,并在连接边缘存储投票值及其时间戳。

如果重要的话,选民与其民意测验之间的联系应该是双向的,即每个用户都与他的投票民意测验相连,而每个民意测验都与其选民相连。

reactjs graphql graphql-js relayjs

3
推荐指数
1
解决办法
581
查看次数

使用循环引用动态创建graphql架构

通过使用graphql-js,我需要通过迭代某些数据的数组来动态创建graphql模式,例如:

[{
    name: 'author',
    fields: [{
        field: 'name'
    }, {
        field: 'books',
        reference: 'book'
    }]
}, {
    name: 'book',
    fields: [{
        field: 'title'
    }, {
        field: 'author',
        reference: 'author'
    }]
}]
Run Code Online (Sandbox Code Playgroud)

问题是循环引用.当我创建AuthorType时,我需要创建BookType,反之亦然.

因此生成的模式应如下所示:

type Author : Object {  
  id: ID!
  name: String,
  books: [Book]
}

type Book : Object {  
  id: ID!
  title: String
  author: Author
}
Run Code Online (Sandbox Code Playgroud)

我怎么解决这个问题?

circular-dependency circular-reference graphql graphql-js

3
推荐指数
1
解决办法
3009
查看次数

Mocking GraphQL,MockList只在数组中生成两个项目

我试图在我的GraphQL模拟服务器中生成10个项目的列表,如下所示:

import { makeExecutableSchema, addMockFunctionsToSchema, MockList } from 'graphql-tools';
import casual from 'casual';
import typeDefs from './schema.graphql';

export const schema = makeExecutableSchema({ typeDefs });

const mocks = {
  File: () => ({
    path: casual.random_element([
      '/assets/images/cars/1.JPG',
      '/assets/images/cars/2.JPG',
      '/assets/images/cars/3.JPG',
      '/assets/images/cars/4.JPG',
      '/assets/images/cars/5.JPG',
      '/assets/images/cars/6.JPG',
      '/assets/images/cars/7.JPG',
    ]),
  }),
  UsedCar: () =>
    new MockList(10, () => ({
      price: casual.integer(10000, 99999999),
      year: casual.integer(1990, 2017),
    })),
};

// This function call adds the mocks to your schema!
addMockFunctionsToSchema({ schema, mocks });
Run Code Online (Sandbox Code Playgroud)

但我总是得到两辆二手车,我不知道为什么.有人可以帮忙吗?

此致,穆斯塔法

javascript mocking graphql graphql-js

3
推荐指数
1
解决办法
1377
查看次数

如何处理GraphQL中的嵌套输入

在编写查询时,我可以在任何字段上定义一个解析器,并且该字段的值将由其解析器确定,而与查询深度无关。

但是,当编写突变时,我似乎只能在根级别定义解析器。在我的args或输入类型的字段中添加resolve方法似乎没有任何影响。

处理突变中的嵌套输入的最佳方法是什么?

graphql graphql-js

3
推荐指数
1
解决办法
2976
查看次数

Apollo GraphQL:未在突变子字段上调用解析器

我试图从一个突变中返回一个查询类型,在某些情况下我可以使它工作,但不能按我想要的方式工作。该问题与所使用的查询类型没有特别关系,因为我发现使用以外的其他类型具有相同的行为Query

您可以在https://codesandbox.io/s/1z8kjy8m93上运行和修改此代码

服务器

const { ApolloServer, gql } = require("apollo-server");

const typeDefs = gql`
  type Query {
    hello(msg: String): String
  }

  type Mutation {
    someMutation(someArg: String): MutationResponse
  }

  type MutationResponse {
    query: Query
    status: String
  }
`;

const resolvers = {
  Query: {
    hello: (root, args, context) => {
      console.log("hello: args = ", args);
      return `${args.msg}, world !`;
    }
  },
  Mutation: {
    someMutation: (root, args, context) => {
      console.log("someMutation: args = ", args);
      return { status: …
Run Code Online (Sandbox Code Playgroud)

apollo graphql graphql-js apollo-server

3
推荐指数
1
解决办法
635
查看次数