Quiero hacer varias copias de Form2 React Component con un evento de clic, pero el código no funciona como quiero, soy nuevo en React, así que alguien puede ayudarme.
const Comform = () => { const Form2 = () => { return( <div className="card" id='form-card2'> <input className="form-check-input" type="checkbox" value="" id="options-check" onClick={Optionscheck} /> </div> ); } const Replica = () { <Form2/> } return( <button type="button" className="btn btn-success" onClick={Replica}>Add</button> ); }Mantenga un estado como contador de réplicas y represente la cantidad de elementos que desee mediante Array.from y Array.prototype.map .
Prueba así:
const Form2 = () => { return ( <div className="card" id="form-card2"> <input className="form-check-input" type="checkbox" value="" id="options-check" // onClick={Optionscheck} /> abcd </div> ); }; const Replica = () => { const [replicaCount, setReplicaCount] = React.useState(0); return ( <div> <button type="button" className="btn btn-success" onClick={() => setReplicaCount((prev) => prev + 1)} > Add </button> {Array.from({ length: replicaCount }).map((_, index) => ( <Form2 key={index}/> ))} </div> ); }; ReactDOM.render(<Replica />, document.querySelector('.react')); <script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script> <script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script> <div class='react'></div>Resumen
Tendría que crear un controlador para el botón de réplica y un estado que rastree la frecuencia con la que se hizo clic en el botón, de modo que pueda representar tantos elementos de formulario como se hizo clic en el botón.
Ejemplo
import { useState } from "react"; import "./styles.css"; const FormItem = () => ( <div className="formItem"> <label>Check me</label> <input type="checkbox" /> </div> ); const ReplicaButton = ({ addFormItem }) => ( <button onClick={addFormItem}>Add more</button> ); export default function Form() { const [formCount, setFormCount] = useState(1); const addFormItem = () => setFormCount(formCount + 1); return ( <div> <form className="formius"> {Array(formCount) .fill(null) .map(() => ( <FormItem /> ))} </form> <ReplicaButton addFormItem={addFormItem} /> </div> ); }