Я создаю форму реакции с библиотекой Formik.Моя цель - создать XML-документ с вводом формы.Мой подход заключается в том, что если бы я мог создать хорошо структурированный объект JS с помощью Formik, то я мог бы написать функцию для записи этих полей формы в схему xml.
Теперь я знаю, что с <FieldArray />
компонентом Formik я могу создавать вложенные объекты, и это может помочь мне позже обработать родительские и дочерние элементы создания файла XML, но мне действительно нужна помощьо том, как я могу иметь дело с атрибутами XML внутри объекта.Атрибуты также являются частью формы.Пользователь должен иметь возможность вводить их как обычные поля формы.Я отчаянно ищу решение.Ниже я представил схему для желаемого XML-документа и желаемого поля формы.
<creators>
<creator>
<creatorName nameType="Personal">Miller, Elizabeth</creatorName>
<givenName>Elizabeth</givenName>
<familyName>Miller</familyName>
<nameIdentifier schemeURI="organi.org/" nameIdentifierScheme="ORC">7</nameIdentifier>
<affiliation>DataCite</affiliation>
</creator>
</creators>
Может ли кто-нибудь дать мне пример того, как создать компонент <FieldArray />
, который может быть полезен для создания приведенного выше схематического XML-документа?
Обновление: большое спасибо @ rutherford-wonkington за ваш ответ.
Я вижу, вы пытаетесь решить мою проблему с атрибутами, добавив ключ 'value' к объекту JS.Это было именно то, что я искал.По вашему предложению, с небольшой модификацией, я создал компонент ниже.Как вы думаете, этот компонент закроет сделку?Тогда я мог бы отредактировать этот пост и принять ваш ответ.
<code>import { FieldArray, Form, Field,Formik } from "formik";
import { Button } from "@material-ui/core";
export const Creators = () => (
<div>
<h1>Creators</h1>
<Formik
initialValues={{
creator: [
{creatorName: {value: "Elisabeth, Miller", nameType: "Personal"}}, {givenName: 'Elisabeth'},
{familyName: "Miller"},
{nameIdentifier: {value:'7', schemeURI: "organi.org/", nameIdentifierScheme:"ORC"}},
{affiliation: "Cook"}
]}}
render={({ values }) => (
<Form>
<FieldArray
name="creator"
render={arrayHelpers => (
<div>
{values.creator.map((creator, index) => (
<div>
<Field name={`creator.${index}.creatorName.value`} />
<Field name={`creator.${index}.creatorName.nameType`} />
<Field name={`creator.${index}.givenName`} />
<Field name={`creator.${index}.familyName`} />
<Field name={`creator.${index}.nameIdentifier.value`} />
<Field name={`creator.${index}.nameIdentifier.schemeURI`} />
<Field name={`creator.${index}.nameIdentifier.nameIdentifierScheme`} />
<Field name={`creator.${index}.affiliation`} />
<Button type="button" onClick={() => arrayHelpers.remove(index)}>
-
</Button>
</div>
))}
<Button color="primary"
type="button"
onClick={() => arrayHelpers.push({})}
>
Add New
</Button>
</div>
)}
/>
<pre>{JSON.stringify(values, null,2 )}
)} /> );