RX100で撮り歩くブログ

RX100で撮った写真を中心によりよい生活を目指すブログ

AWS Amplifyでリストの並び順をcreatedAtに変更する

AmplifyでたとえばTodoリストのようなものを作って、いくつかTodoを登録しリロードすると、登録した順番になっていないことに気づきました。

Amplifyに詳しい方に聞いてみると、デフォルトでは並びがおかしいらしいです。自分の実装がおかしいのではなくて良かった〜笑。

どうやらランダムで生成されるidで並び順を決めているそう。。。そりゃめちゃくちゃになるわ。

解決方法として参考にしたのはこちらの記事の @keyについて。この記事には本当にお世話になっている。ありがたい。

qiita.com

この記事ではnameでソートするようにしてるところを、createdAtにすればOK。

以下のようにkeyを追加。

type Note
  @model
  @auth(rules: [{ allow: owner }])
  @key(
    name: "SortByCreatedAt"
    fields: ["owner", "createdAt"]
    queryField: "listNotesSortedByCreatedAt"
  ) {
  id: ID!
  title: String!
  content: String!
  owner: String!
  updatedAt: AWSDateTime
  createdAt: AWSDateTime
}

pushします

amplify push

listNoteなどで一覧取得していた箇所を、listNotesSortedByCreatedAtに変更

API.graphql(graphqlOperation(listNotesSortedByCreatedAt, { owner: username }))

これでcreatedAtでソートされた一覧が取得できます。