#javascript #reactjs #react-hooks #formik
Вопрос:
Я работал над формой , и я хочу отобразить тот же div в разделе «Активное членство», когда нажата кнопка «Добавить еще». Пользователь может иметь несколько активных участников, поэтому каждый раз, когда пользователь нажимает кнопку, отображается один и тот же раздел ввода. Я думаю, что цикл for может помочь, но он не работает внутри кодовой базы jsx. Я использую formik для создания формы.
Комментарии:
1. Поскольку вы используете Formik, вам следует рассмотреть возможность использования formik.org/docs/api/fieldarray для этого случая .
Ответ №1:
Вы можете легко реализовать это с помощью <FieldArray />
.
<FieldArray / > — это компонент, который помогает при <FieldArray />общих манипуляциях с массивами/списками. Вы передаете ему свойство name с путем к ключу в значениях, содержащему соответствующий массив.
Ресурс — Официальная документация (https://formik.org/docs/api/fieldarray)
import { Formik, Form, Field, FieldArray } from "formik";
import "./styles.css";
export default function App() {
return (
<div>
<h1>Friend List</h1>
<Formik initialValues={{ memberships: [] }}> {/* Initialize a membership empty array*/}
{(props) => (
<Form>
<FieldArray name="memberships">
{({ push, form: { values } }) => (
<div>
{values.memberships amp;amp;
values.memberships.length > 0 amp;amp;
values.memberships.map((item, index) => (
<div key={index}>
<Field
name={`memberships.${index}.name`}
placeholder="Membership Title"
/>
<Field
name={`memberships.${index}.position`}
placeholder="Position"
/>
<Field
name={`memberships.${index}.join.date`}
placeholder="Join Date"
/>
</div> {/* Active Membership section */}
))}
<button type="button" onClick={() => push({})}> {/* Create the click handler */}
Add More
</button>
</div>
)}
</FieldArray>
</Form>
)}
</Formik>
</div>
);
}
https://codesandbox.io/s/formik-add-more-ncsw3?file=/src/App.js
Дайте мне знать, если вам понадобится дополнительная поддержка.