web-dev-qa-db-ja.com

Apolloクライアントから「ストアには既にIDが含まれています」というエラーが表示されます-これはどういう意味ですか?

反応ネイティブプロジェクトでは、オブジェクトを作成してから、新しく作成したオブジェクトの詳細ページに画面をリダイレクトしていると、次のエラーが発生します。

未処理のプロミス拒否の可能性があります(ID:0):ネットワークエラー:ストアエラー:アプリケーションがIDのないオブジェクトを書き込もうとしましたが、ストアにはこのオブジェクトのXYZのIDがすでに含まれています。

データベースを見ると、アイテムが前のステップで適切に作成されていることがわかります。リストを介して同じ画面とアイテムに移動すると(作成とリダイレクトの後ではなく)正常に動作するようです。アポロストアが正しい状態を保つには、待機する必要がありますか、それとも何らかのタイミングを設定する必要がありますか?

標準の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 {
...
35
MonkeyBonkey

idcreatorフィールドに追加する必要があります。

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

一般に、クエリのすべてのサブセレクションには必ずidを追加してください。

64
marktani