Как загрузить изображение не используя input[type=file]?
Дана следующая разметка:
<div class="edit-item-image">
<div class="edit-item-image__image-wrap">
<!-- Тут должен появится предпросмотр изображения (тег <img>) перед отправкой данных формы на сервер -->
</div>
<div class="edit-item-image__btn-wrap">
<button class="button button--small button--black-border edit-item-image__btn">Добавить</button>
<button class="button button--small button--black-border edit-item-image__btn">Удалить</button>
</div>
</div>
Данная разметка является частью формы <form><form/>.
И по этой разметке мне нужно создать JSX/TSX реакт-компонент.
Собственно создать компонент не проблема.
Проблема как реализовать загрузку файла с ПК.
Единственное что удалось по теме загуглить, это использовать скрытый input[type="file"] и при клике на кнопку вызывать срабатывание этого скрытого инпута.
Но возможно в Реакте есть какие-то способы реализовать загрузку файла иным способом? Какой-нибудь экзотический хук про который я не знаю, или на крайний случай, какой-нибудь npm-пакет, решающий поставленную задачу?
UPD. Уже больше часа на самом деле гуглю и ничего внятного не нашёл.
Однозначно не берусь утверждать в силу отсутствия опыта, но есть ощущение, что мне просто косячную вёрстку подсунули и нужно выкинуть <button> и заменить его стилизованным <input type="file">
Ответы (1 шт):
Если Вам нужно сделать React компонент, тогда скройте input[type="file"] и воспользуйтесь хуком useRef,чтобы получить ссылку на input[type="file"] Потом создайте кнопку и подпишите ее на событие onClick и в функции которая будет срабатывать при нажатии на кнопку программно используя ссылку на input[type="file"] кликните по input[type="file"].
как-то так:
const inputFile = useRef(null);
const hendlerInput = () => {
inputFile.current.click();
};
<button onClick={ hendlerInput }>Добавить</button>
<input type="file" ref="inputFile" className="hidden" />