Reading data from Storage
1) Add the Storage Provider
First, we need to wrap the component using Firebase Storage with the FirebaseStorageProvider
, which is responsible for initializing the Firebase Storage SDK.
import FirebaseStorageProvider from '~/core/firebase/components/FirebaseStorageProvider';<FirebaseStorageProvider> <ComponentThatUsesStorage /></FirebaseStorageProvider>
2) Create a Hook to fetch data from Storage
Let's assume we want to fetch a list of files from storage by getting their url
. This is a common scenario for retrieving images stored in Firebase Storage.
function useOrganizationAssets() { const storage = useStorage(); const { setData, setError, setLoading, state } = useRequestState<MediaItem[]>(); const path = `/${organizationId}/uploads`; const reference = ref(storage, path); useEffect(() => { void (async () => { try { const result = await list(reference); const items = await Promise.all( result.items.map(async (item) => { const url = await getDownloadURL(item); return url; }) ); setData(items); } catch (e) { setError(e); } })(); }, [reference, setData, setError]); return state;}
3) Use the custom hook in your components
And then we can use the hook in our components:
function MyImages() { const { data, loading, error } = useOrganizationAssets(); if (loading) { return <p>Loading...</p>; } if (error) { return <p>We could not fetch your images :(</p>; } return ( <div className={'flex flex-col space-y-2'}> {data.map(image => { return <img src={image} key={image} /> })} </div> );}