Chciałbym zrobić galerię zdjęć na stronie, ale nie chcę przechowywać plików na zewnętrznym serwerze, więc moim pomysłem jest przechowywanie wszystkich obrazów w folderze publicznym projektu. Głównym założeniem jest możliwość dodawania kolejnych plików do listy po zbudowaniu aplikacji. Korzystam z frameworka React+Vite.
Pobrałem wszystkie pliki z folderu `public/gallery`. `import.meta.glob` zwraca funkcje, które zwracają Promise. Dlatego wywołałem każdą funkcję i z promisów uzyskałem adresy URL plików.
interface ImportImageData {
default: string
}
type ImportImageGlob = () => Promise<ImportImageData>
useEffect(() => {
const fetchGallery = (): void => {
const images: ImportImageGlob[] = Object.values(
import.meta.glob('/public/gallery/*')
) as ImportImageGlob[]
_.forEach(images, (fetchImg: ImportImageGlob): void => {
fetchImg()
.then((data: ImportImageData): void => {
setDataSource((prev: string[]): string[] => {
return _.uniq([...prev, data.default])
})
})
.catch((): void => {})
})
}
fetchGallery()
}, [setDataSource])
W wersji developerskiej aplikacji wszystko działa idealnie. Jednak w wersji produkcyjnej lista plików nie jest odświeżana, tzn. kiedy dodaję nowy obraz, wyświetlane są tylko poprzednie pliki.
Jak mogę rozwiązać ten problem? Czy jest jakieś inne rozwiązanie na ten problem?
Z góry dziękuję