Здравствуйте. Имеется некое подобие галереи на реакте и динамический вывод изображений с разной пропорцией сторон (назовем эти изображения горизонтальное и вертикальное, для простоты). Задача в том, что хочу, чтобы если идут подряд 3 вертикальных, то они будут в одной строке, если 2 горизонтальных или 1 горизонтальное и 1 вертикальное, то 2 в строке.
Итак, до чего дошел я в этом вопросе. Решил, что при построении контента буду проверять ширину и высоту изображения и в зависимости от результатов и задавать ширину элемента 50% или 33%. Но здесь столкнулся с проблемой:
Вот код для получения размеров картинки:
const getMeta = (url) =>
new Promise((resolve, reject) => {
const img = new Image();
img.onload = () => resolve(img);
img.onerror = (err) => reject(err);
img.src = url;
});
// Usage example:
(async() => {
const img = await getMeta('https://i.sstatic.net/qCWYU.jpg');
console.dir(img.naturalHeight + ' ' + img.naturalWidth);
})();
Вот генерация содержимого:
let items = project?.items.map(item => {
return <div className={'project-item'}>
<img
key={item.id}
src={`/img/${item.path}/${item.fileName}`}
/>
</div>
})
Вопрос в том как мне использовать данные ширины и высоты картинки, полученные в асинхронной функции в мэпе, чтобы уже применить свою логику в нем. Ну или может кто подскажет более изящное решение.