无法使用 Apollo 在前端改变数据

Posted

技术标签:

【中文标题】无法使用 Apollo 在前端改变数据【英文标题】:Not able to mutate data on the front end with Apollo 【发布时间】:2019-10-22 12:01:20 【问题描述】:

我正在尝试使用带有 GraphQl 的 Apollo 客户端在 React-Native 上构建一个预订应用程序

我无法在前端调用突变。

下面是一些带有架构的代码以及我的突变是什么样的。

我做错了什么?

架构:

createReservation(
  data: ReservationCreateInput!
): Reservation!
type Reservation
implements Node 
  id: ID!
  name: String!
  hotelName: String!
  arrivalDate: String!
  departureDate: String!

我的突变:

const addReservationMutation = gql`
  mutation createReservation(
    $data: 
      name: String!
      hotelName: String!
      arrivalDate: String!
      departureDate: String!
    )

   
     name
  
`;

包裹在 Mutation 组件中的按钮

<Mutation mutation=addReservationMutation>
      (addReservation,  data ) => (
        <Button
          title="Reserve your!"
          onPress=() => 
            addReservation(
              variables: 
                name: "Joe",
                hotelName: "LemonTree",
                arrivalDate: "06/05/2019",
                departureDate: "06/12/2019"
              
            );
          
        />
      )
    </Mutation>

错误:

Syntax Error: Expected Name, found 
74 Requiring module "index.js", which threw an exception: Syntax Error: Expected Name, found 

GraphQL request (3:12)
2:   mutation createReservation(
3:     $data: 
              ^
4:       name: String!


NativeModules @ RNDebuggerWorker.js:1
c @ RNDebuggerWorker.js:1
"index.js", which threw an exception: Syntax Error: Expected Name, found 

GraphQL request (3:12)
2:   mutation createReservation(
3:     $data: 
              ^
4:       name: String!

handleException @ 
c @ RNDebuggerWorker.js:1
…:74 Requiring module "index.js", which threw an exception: Syntax Error: Expected Name, found 

GraphQL request (3:12)
2:   mutation createReservation(
3:     $data: 
              ^
4:       name: String!

【问题讨论】:

请详细说明问题所在。您是否在控制台中看到错误?如果您检查开发工具下的网络选项卡,服务器的响应是什么?如果请求失败,来自服务器的响应通常会包含一个 errors 数组,其中包含有关问题所在的其他详细信息。请更新您的问题并提供更多信息。 出现错误更新 【参考方案1】:

当您需要对突变进行复合字段时使用输入类型,请检查

https://graphql.org/graphql-js/mutations-and-input-types/

您的架构、突变和代码应该与输入类型类似。

架构:

input ReservationInput 
  name: String!
  hotelName: String!
  arrivalDate: String!
  departureDate: String!

变异:

mutation createReservation($data: ReservationInput )
     name

组件:

<Mutation mutation=addReservationMutation>
      (addReservation,  data ) => (
        <Button
          title="Reserve your!"
          onPress=() => 
            addReservation(
              variables: 
                data: 
                  name: "Joe",
                  hotelName: "LemonTree",
                  arrivalDate: "06/05/2019",
                  departureDate: "06/12/2019"
               
              
            );
          
        />
      )
</Mutation>

【讨论】:

【参考方案2】:

你的突变在我看来是错误的。是不是应该更像这样:

const addReservationMutation = gql`
  mutation onCreateReservation(
    $data: 
      name: String!
      hotelName: String!
      arrivalDate: String!
      departureDate: String!
    ) 
     createReservation(data: $data) 
       name
    
  
`;

【讨论】:

以上是关于无法使用 Apollo 在前端改变数据的主要内容,如果未能解决你的问题,请参考以下文章

无法将 GraphQL 查询从 Apollo 客户端发送到 Rails GraphQL 后端

我无法使用 mongo / mongoose / NO METEOR 设置 react apollo mongodb app => 解析器

reactjs / jest:无法使用 MockedProvider 用数据填充 react-apollo 组件?

无法使用 Apollo 客户端以编程方式获取数据

找不到模块:无法解析“apollo-link-context”-REACT,APOLLO-SERVER

导入错误:无法从“apollo-link-state/lib/bundle.umd.js”中找到模块“graphql”