#javascript #reactjs
#javascript #reactjs
Вопрос:
У меня есть компонент, который мне нужно «дублировать», когда я нажимаю кнопку, они рекомендовали мне использовать .push, но я не понимаю, пример, который они мне дали [<Component />]
, таков, и вы делаете push .push(<Component />)
, компонент, который я хочу «дублировать» Dropzone
, каждый раз, когда я нажимаю кнопку Button
:
export default function Registration() {
return (
<div className="w-full text-sm relative">
<InputTitle className="mb-4">Documentación</InputTitle>
<div className="w-full flex items-center justify-between border-t border-b border-dark-15 p-4">
<SingleDropdown>Selecciona tipo de documento</SingleDropdown>
<div className="flex justify-end">
[ <Dropzone />]
</div>
</div>
<div className="flex justify-end items-center pr-4 pt-8 h-9">
<Button.Secundary className="" onClick={()=>.push(<Dropzone />)}>
Agregar otro documento
<BsPlus className="ml-2 text-2xl font-bold" />
</Button.Secundary>
</div>
</div>
)
}
Комментарии:
1. Использовать состояние с массивом
2. вам нужно присвоить dropzone состоянию и обновить состояние, переместив dropzone в массив.
3. Проблема в том, что я не так много знаю, и я не знаю, на что это будет похоже, как вы говорите
4.
[ <Dropzone />]
неправильный способ отображения компонентов. Вы можете создать массив перед оператором return с одним компонентом `DropZone. При каждом нажатии обновляйте массив, используя метод push этого массива. И визуализировать массив с помощью функции map.5. можете ли вы привести пример? извините за мое невежество, я все еще учусь @kay
Ответ №1:
Вам нужно сохранить выпадающие списки в массив, который можно отобразить в HTML. Вы делаете это в функциональных компонентах с помощью React.useState
hook . Вы можете использовать это, чтобы сохранять ранее добавленные выпадающие списки для каждого повторного отображения компонента. При этом также возможно добавлять новый выпадающий список каждый раз, когда пользователь нажимает на кнопку.
Я привел пример ниже.
export default function Registration() {
const [dropdowns, setDropdowns] = React.useState([]);
const addDropdown = (component) =>
setDropdowns((prev) => [...prev, component]);
return (
<div className='w-full text-sm relative'>
<InputTitle className='mb-4'>Documentación</InputTitle>
<div className='w-full flex items-center justify-between border-t border-b border-dark-15 p-4'>
<SingleDropdown>Selecciona tipo de documento</SingleDropdown>
<div className='flex justify-end'>
{dropdowns}
</div>
</div>
<div className='flex justify-end items-center pr-4 pt-8 h-9'>
<Button.Secundary
className=''
onClick={() => addDropdown(<Dropzone />)}
>
Agregar otro documento
<BsPlus className='ml-2 text-2xl font-bold' />
</Button.Secundary>
</div>
</div>
);
}