javascript - Validácia poľa Formik obsahujúceho pole objektov pomocou Yup


Ukážkový kód: https://codesandbox.io/s/busy-bose-4qhoh?file=/src/App.tsx

Snažím sa zostaviť formulár, ktorý bude prijímať pole Criteria objektov Criterion, ktoré sú určitého typu:

export interface Criterion {
  field: string,
  op: string,
  values: []
}

export interface Configuration {
  title: string,
  description: string,
  criteria: Criterion[],
}

Takže objekt Configuration môže mať viacero Criterion, ktoré sa používajú na definovanie dotazu webového API. Dostal som sa až sem, ale zatiaľ čo yup správne overuje pole, keď sa dostane k formiku, zdá sa, že ho opäť považuje za reťazec, aj keď sú typy (myslím) správne definované.

Tu je príklad toho, čo vidím, ak odošlete formulár použitím poľa ako hodnoty criteria:

[
  {
    "field": "createdOn",
    "op": "Equal",
    "values": [
      "2020-01-01"
    ]
  }
]

hodnota formiku zobrazuje:

 "criteria": "[\n    {\n      \"field\": \"createdOn\",\n      \"op\": \"Equal\",\n      \"values\": [\n        \"2020-01-01\"\n      ]\n    }\n  ]"

Existuje spôsob, ako prinútiť Formik, aby to považoval za pole javascriptových objektov namiesto reťazca?

Odpoveď č. 1

Najskôr musíte analyzovať hodnotu kritérií na JSON (pretože ide o reťazec z textového poľa, nie o objekt), potom ju znovu priradiť takto:

            let temp = { ...values };
            temp.criteria = JSON.parse(values.criteria);

Ukážka: https://codesandbox.io/s/zealous-northcutt-f0d8k?file=/src/App.tsx