write ahead log

ロールフォワード用

Yupで独自のバリデーションチェックをしたい

ReactとかVueを書くとたまに使うことになるYupというバリデーションライブラリがある。

github.com

大抵の場合は効率よく書けるんだけど、込み入ったバリデーションが必要になると困る。

何か抜け道が用意されているだろうと探すとtestというschemeがあるらしい。

GitHub - jquense/yup: Dead simple Object schema validation

適当に用意した雰囲気コードだとこんな感じで書けるらしい。

const canWork = (start, name) => doSomething();

const validationSchema = Yup.object().shape({
  worker: Yup.string(),
  start_date: Yup.date()
    .required('開始日は必ず入力してください')
    .test({
      name: 'start_date',
      message: 'この作業者はこの日付には開始できません',
      test: function (start) {
        return !canWork(start, this.parent.worker);
      },
    }),
});

ポイントとしては以下な気がする。

  • testに渡す関数はアロー演算子ではなくfunctionで作る必要がありそう(thisのコンテキスト的に)
  • test関数へはテスト対象のフィールド値が渡される
  • this.parent.hogehogeで他のフィールドを参照できる
  • テスト結果がfalseならバリデーションエラーになる

個人的にはこの手のライブラリは苦手なんだよなぁ。。。

込み入ったことするとややこしいけど、一度導入するとなかなか排除できないし。うぅむ。