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

Mon*_*key 30 graphql react-apollo apollo-client

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

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

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

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

GQL:

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

这是一段代码片段

@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 {
...
Run Code Online (Sandbox Code Playgroud)

mar*_*ani 55

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

query getEvent($eventId: ID!) {
    Event(id:$eventId) {
      id
      headline
      photo
      location
      startTime
      creator {
        id
        username
        photo
      }
    }
  }
Run Code Online (Sandbox Code Playgroud)

通常,请确保添加id到查询的所有子选择中.

  • 如果这个错误在嵌套属性中不需要id但在根级别需要id,那么这个答案很有帮助.我会很感激解释为什么. (4认同)
  • @ ABCD.ca我不是100%肯定,但似乎有一些结果缓存正在进行,所以你必须为apollo客户端提供唯一的标识符来检索它.有道理,但我在1.0.0发布之前没有遇到过这个问题,所以我暂时恢复到0.10.1 (2认同)