66 UploadResult ,
77 UploadTaskSnapshot ,
88} from 'firebase/storage' ;
9- import { useMemo , useState } from 'react' ;
9+ import { useCallback , useState } from 'react' ;
1010
1111export type UploadFileHook = [
1212 (
@@ -24,37 +24,39 @@ export default (): UploadFileHook => {
2424 const [ uploading , setUploading ] = useState < boolean > ( false ) ;
2525 const [ snapshot , setSnapshot ] = useState < UploadTaskSnapshot > ( ) ;
2626
27- const uploadFile = async (
28- storageRef : StorageReference ,
29- data : Blob | Uint8Array | ArrayBuffer ,
30- metadata ?: UploadMetadata | undefined
31- ) : Promise < UploadResult | undefined > => {
32- return new Promise ( ( resolve , reject ) => {
33- setUploading ( true ) ;
34- setError ( undefined ) ;
35- const uploadTask = uploadBytesResumable ( storageRef , data , metadata ) ;
36- uploadTask . on (
37- 'state_changed' ,
38- ( snapshot ) => {
39- setSnapshot ( snapshot ) ;
40- } ,
41- ( error ) => {
42- setUploading ( false ) ;
43- setError ( error ) ;
44- resolve ( undefined ) ;
45- } ,
46- ( ) => {
47- setUploading ( false ) ;
48- setSnapshot ( undefined ) ;
49- resolve ( {
50- metadata : uploadTask . snapshot . metadata ,
51- ref : uploadTask . snapshot . ref ,
52- } ) ;
53- }
54- ) ;
55- } ) ;
56- } ;
27+ const uploadFile = useCallback (
28+ async (
29+ storageRef : StorageReference ,
30+ data : Blob | Uint8Array | ArrayBuffer ,
31+ metadata ?: UploadMetadata | undefined
32+ ) : Promise < UploadResult | undefined > => {
33+ return new Promise ( ( resolve , reject ) => {
34+ setUploading ( true ) ;
35+ setError ( undefined ) ;
36+ const uploadTask = uploadBytesResumable ( storageRef , data , metadata ) ;
37+ uploadTask . on (
38+ 'state_changed' ,
39+ ( snapshot ) => {
40+ setSnapshot ( snapshot ) ;
41+ } ,
42+ ( error ) => {
43+ setUploading ( false ) ;
44+ setError ( error ) ;
45+ resolve ( undefined ) ;
46+ } ,
47+ ( ) => {
48+ setUploading ( false ) ;
49+ setSnapshot ( undefined ) ;
50+ resolve ( {
51+ metadata : uploadTask . snapshot . metadata ,
52+ ref : uploadTask . snapshot . ref ,
53+ } ) ;
54+ }
55+ ) ;
56+ } ) ;
57+ } ,
58+ [ ]
59+ ) ;
5760
58- const resArray : UploadFileHook = [ uploadFile , uploading , snapshot , error ] ;
59- return useMemo < UploadFileHook > ( ( ) => resArray , resArray ) ;
61+ return [ uploadFile , uploading , snapshot , error ] ;
6062} ;
0 commit comments