В этом случае вам нужно выбрать событие как действие из модальной кнопки.
и дать имя события (скажем, eventFromButton1 ).
А в компоненте <Form />
добавьте onCustomEvent
prop.
<Form
form={{
onCustomEvent={customEvent => {
console.log(customEvent);
}}
/>
Функция onCustomEvent
получит объект prop со следующей структурой
{
type: "eventFromButton1",
component: {},
data: {},
event: MouseEvent
}
. Вы можете использовать свойство type
, чтобы определить, какая кнопка инициировала обновление, и использовать свойство data
, чтобы получить данные формы.
Попытка изменить данные формы с помощью кнопки, добавленной ниже (я не вижу хорошей документации по этим настройкам в react-formio
)
Использует submission
данные в качестве реакции state
.
Измените состояние на onCustomEvent
и выполните рендеринг формы.
import React, { useState } from "react";
import { Form } from "react-formio";
function CustomForm() {
const [submission, setSubmission] = useState({});
return (
<div className="App">
<Form
form={{
components: [
{
label: "First Name",
validate: { required: true, minLength: 3 },
key: "firstName",
type: "textfield",
input: true
},
{
type: "textfield",
key: "lastName",
label: "Last Name",
placeholder: "Enter your last name",
input: true
},
{
label: "Pupulate Nast Name",
action: "event",
showValidations: false,
key: "submit1",
type: "button",
input: true,
event: "someEvent"
},
{
type: "button",
label: "Submit",
key: "submit",
disableOnInvalid: true,
input: true
}
]
}}
submission={{ data: submission }}
onSubmit={a => {
console.log(a);
}}
onSubmitDone={a => {
console.log(a);
}}
onCustomEvent={customEvent => {
console.log(customEvent);
setSubmission({ ...customEvent.data, lastName: "Laaast Name" });
}}
/>
</div>
);
}
export default CustomForm;
Хотя в форме есть некоторые глюки.
Вы увидитемерцание в пользовательском интерфейсе.
Ошибки проверки исчезли бы (похоже, кнопка отправки все еще отключена)
Попробуйте это Песочница
Также вы можете попробовать использовать redux, как указано в документации.