【问题标题】:GraphQL error: Default value for $completedAt doesn't match type DateTime in React Apollo?GraphQL 错误:$completedAt 的默认值与 React Apollo 中的 DateTime 类型不匹配?
【发布时间】:2019-01-12 18:02:30
【问题描述】:

我有这样的突变 -

import gql from "graphql-tag";

const completedAt = new Date().toISOString();

export const CREATE_TODO = gql`
  mutation($body: String!, $completedAt: DateTime = completedAt) {
    createTodo(input: { body: $body, completed_at: $completedAt }) {
      id
      body
    }
  }
`;

当我调用这个突变时,我得到了错误

GraphQL 错误:$completedAt 的默认值与类型不匹配 React Apollo 中的日期时间

我该如何解决这个问题?我也试过JSON.stringify(new Date().toISOString()),但没有运气:(

另外,请注意这是可行的 -

import gql from "graphql-tag";

const completedAt = JSON.stringify(new Date().toISOString());

export const CREATE_TODO = gql`
  mutation($body: String!) {
    createTodo(input: { body: $body, completed_at: ${completedAt} }) {
      id
      body
    }
  }
`;

【问题讨论】:

    标签: javascript reactjs graphql apollo react-apollo


    【解决方案1】:

    我改变了我的解决方案。现在,我所做的是我不会像那样使用 completedAt 。我将其作为 GraphQL 变量的输入,例如:

    import gql from "graphql-tag";
    
    export const CREATE_TODO = gql`
      mutation createTodo($body: String!, $completedAt: DateTime) {
        createTodo(input: { body: $body, completed_at: $completedAt }) {
          id
          body
          completed_at
        }
      }
    `;
    

    然后,由于 $completedAt 不是 必填 字段,如果我不想要任何值或发送,我发送 null new Date().toISOString() 如果我希望它具有当前时间。

    例如:

    不完整的 Todo,即 DateTime 的 Null 值

    mutate({
        query: CREATE_TODO,
        variables: { body: "Incomplete todo", completedAt: null }
    });
    

    完成待办事项,即 DateTime 的当前时间

    mutate({
        query: CREATE_TODO,
        variables: { body: "Complete todo", completedAt: new Date().toISOString() }
    });
    

    【讨论】:

      猜你喜欢
      • 2013-12-22
      • 2018-06-08
      • 1970-01-01
      • 2018-12-27
      • 2014-11-10
      • 2019-07-22
      • 2020-11-15
      • 2021-08-29
      • 1970-01-01
      相关资源
      最近更新 更多