🎃

zodix で同一キーの複数URLパラメータから配列を取得する

2023/12/09に公開

remix で loader や action でURLパラメータを扱うときに、zodix を使って楽ちんにしています。

ところが、同一の URLパラメータキーで複数のものを指定するケース、たとえば search?id=1&id=2&id=3 などで、スキーマの定義が分からなかったのですが、結論これでした。

export const loader = async ({ request }: LoaderFunctionArgs) => {
  const { id } = zx.parseQuery(request, {
    id: z
      .union([z.array(z.string()), z.string()])
      .transform((val) => (Array.isArray(val) ? val : [val]))
      .optional()
      .default([]),
  })
  
  console.log({id}) // { "id": ["1", "2", "3"] }
}

zodix の parseSearchParamsDefault が同一キーの値が複数ある場合は配列、一つしかないときは文字列にしてるので、それを Array.isArray でチェックして配列に合わせてる形になります。

Discussion