Apollo客户端给我一个'商店已经包含id'的错误 - 这是什么意思?

时间:2017-01-30 19:51:07

标签: graphql react-apollo apollo-client

在一个反应​​本机项目中,我正在创建一个对象,然后将屏幕重定向到新创建的对象的详细信息页面,我收到此错误:

可能未处理的承诺拒绝(id:0): 网络错误:存储错误:应用程序尝试编写没有提供ID的对象,但商店已包含此对象的ID为XYZ。

查看数据库,我发现该项目已在上一步中正确创建。通过列表导航到同一屏幕和项目(不是在创建和重定向之后)似乎工作正常。我是否必须等待或以某种方式为apollo商店设置某种时机以保持正确?

我正在使用标准的apollo客户端@graphql绑定/包装

GQL:

 query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        username
        photo
      }
    }
  }
`;

这是一段代码片段

@graphql(getEventGql,{
  options: ({route}) => {
    console.log('route params', route.params);
    return {
      variables: {
        eventId: route.params.eventId,
      }
    }
  },
})

@connect((state) => ({ user: state.user }))
export default class EventDetailScreen extends Component {
...

1 个答案:

答案 0 :(得分:32)

您还必须将id添加到creator字段:

query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        id
        username
        photo
      }
    }
  }

通常,请务必将id添加到查询的所有子选项中。