Возможно ли в React использовать событие click для обычного компонента кнопки, чтобы инициировать щелчок скрытой кнопки отправки / отправки формы со всеми значениями формы и обновленным индексом без изменений?
I иметь приложение с последовательностью шагов (например, мастер) и форму на каждом шаге, которая имеет свою собственную скрытую кнопку отправки. Если щелкнуть ButtonNext
(и ButtonFinal
на последнем шаге), есть ли способ вызвать нажатие на кнопку отправки скрытой формы, чтобы запустить onSubmit
, а затем значения формы и значение индекса были отправлены в handleSubmit
функция?
Возможно, я могу получить доступ к скрытой кнопке отправки с атрибутом data-key
.
РЕДАКТИРОВАТЬ: ButtonNext
и ButtonFinal
являются прямыми родственниками формы в DOM и не могут быть добавлено в форму.
import React, { useState } from 'react'
import { Row, Col } from 'react-styled-flexboxgrid'
import { Form, ButtonNext, ButtonPrevious, ButtonFinal } from './style'
const Application = ({ steps }) => {
const [currentStepNum, setCurrentStepNum] = useState(0)
const [previousStepName, setPreviousStepName] = useState(steps[0].step_name)
const [nextStepName, setNextStepName] = useState(steps[1].step_name)
const [formValues, setFormValues] = useState(null)
const handleSubmit = (values, step) => {
setFormValues(values)
setStep(step)
}
const handleClick = (event, step) => {
event.preventDefault()
setStep(step)
}
const setStep = step => {
step = parseInt(step)
setCurrentStepNum(step)
if (step > 0) {
setPreviousStepName(steps[step - 1].step_name)
}
if (step < steps.length - 1) {
setNextStepName(steps[step + 1].step_name)
}
}
return (
<>
<div>
{steps.map((step, index) => {
return (
<div key={index}>
{currentStepNum == index && (
<>
{step.form.length > 0 && (
<Form
action="/"
fields={fields}
onSubmit={(values) => {
handleSubmit(values, [index + 1])
}}
/>
)}
{index > 0 && (
<ButtonPrevious
onClick={event => {
handleClick(event, [index - 1])
}}
>
Back to {previousStepName}
</ButtonPrevious>
)}
{index < steps.length - 1 && (
<ButtonNext
onClick={Trigger onSubmit here}
>
Next: {nextStepName}
</ButtonNext>
)}
{index == steps.length - 1 && (
<ButtonFinal
onClick={Trigger onSubmit here}
>
FINAL SUBMIT BUTTON PLACEHOLDER
</ButtonFinal>
)}
</>
)}
</div>
)
})}
</div>
</>
)
}
export default Application