#reactjs
Вопрос:
Я довольно новичок в реагировании, поэтому я почти уверен, что это что-то тривиальное, но я действительно изо всех сил пытаюсь это понять. У меня есть кнопка в качестве компонента внутри многоступенчатой формы. Тип кнопки по умолчанию — «отправить», поскольку она вложена в элемент формы. Я уже реализовал «onClick» для навигации по различным шагам (всего 5).
Теперь я хотел бы, чтобы тип кнопки был «кнопка» для шагов 1-4 и изменился на «отправить» на шаге 5.
Вот компонент кнопки:
function Btn(props) { return ( lt;button type={props.type} className={Styling[props.class]} onClick={props.onClick} disabled={props.disabled} style={{ visibility: props.visibility, display: props.display }} gt; {props.text} lt;/buttongt; ); }
И вот как это используется:
function FindTransportationForm(props) { const [step, setStep] = useState(1); const [formData, setFormData] = useState({ pointOfLoading: '', pointOfDelivery: '', cargoWeightInKg: 0, vegetables: 'unchecked', }); const Titles = ['Itinerary', 'Cargo details', 'Capacity requirements', 'Additional information', 'Pick-up']; const StepDisplay = () =gt; { if (step == 1) { return ( lt;Itinerary pointOfLoading={formData.pointOfLoading} pointOfDelivery={formData.pointOfDelivery} formData={formData} setFormData={setFormData} /gt; ); } else if (step == 2) { return lt;CargoInformation /gt;; } }; return ( lt;form className={Styling['find-transportation-form']}gt; lt;span className={Styling['steps']}gt; Step {step} out of {Titles.length} lt;/spangt; lt;div className={Styling['title']}gt; lt;h2gt;{Titles[step - 1]}lt;/h2gt; lt;/divgt; lt;div className={Styling['body']}gt;{StepDisplay()}lt;/divgt; lt;div className={Styling['footer']}gt; lt;div className={Styling['buttons-container']}gt; lt;Btn class={step === Titles.length ? 'btn-green' : 'btn-green'} text={step === Titles.length ? 'find transportation' : 'next'} type={step === Titles.length ? 'submit' : 'button'} onClick={() =gt; { setStep((currStep) =gt; currStep 1); }} display={step lt; Titles.length ? 'block' : 'block'} /gt; {/* lt;Btn class={ step === Titles.length ? "btn-green-submit": "btn-green"} text={step === Titles.length ? "find transportation": "next"} type="submit" display={step === Titles.length ? "block": "none"} /gt; */} lt;Btn class="btn-text" text="back" type="button" onClick={() =gt; { setStep((currStep) =gt; currStep - 1); }} disabled={step == 1} visibility={step === 1 ? 'hidden' : 'visible'} /gt; lt;/divgt; lt;/divgt; lt;/formgt; ); } export default FindTransportationForm;
Ответ №1:
Вы можете обновить тип кнопки по мере изменения шагов вашей формы 🙂
lt;Btn class={ step === Titles.length ? "btn-green": "btn-green"} text={step === Titles.length ? "next": "next"} onClick={() =gt; { setStep((currStep) =gt; currStep 1); }} display={step lt; Titles.length ? "block": "block"} type={step === 5 ? 'submit' : 'button'} // lt;------ /gt;
Комментарии:
1. Спасибо, Макс. Я пытаюсь реализовать это, но как только я перехожу к шагу 5, он отправляется.
2. Что вы подразумеваете под «он подчиняется»? Итак, вы переходите от шага 4 к шагу 5, и что происходит потом?
3. Когда я перехожу с шага 4 на шаг 5, он сразу же переходит на новую страницу на шаге 1.
4. Хм, может поделиться другим кодом, связанным с формой? Возможно, ваш шаг 4 «основан на массиве»(начинается с 0) или что-то еще, и поэтому наше условие должно быть
step === 6 ? 'submit' : 'button'
5. Просто отредактировано, чтобы включить всю форму целиком