🎃
zodix で同一キーの複数URLパラメータから配列を取得する
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