6
6
UploadResult ,
7
7
UploadTaskSnapshot ,
8
8
} from 'firebase/storage' ;
9
- import { useMemo , useState } from 'react' ;
9
+ import { useCallback , useState } from 'react' ;
10
10
11
11
export type UploadFileHook = [
12
12
(
@@ -24,37 +24,39 @@ export default (): UploadFileHook => {
24
24
const [ uploading , setUploading ] = useState < boolean > ( false ) ;
25
25
const [ snapshot , setSnapshot ] = useState < UploadTaskSnapshot > ( ) ;
26
26
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
+ ) ;
57
60
58
- const resArray : UploadFileHook = [ uploadFile , uploading , snapshot , error ] ;
59
- return useMemo < UploadFileHook > ( ( ) => resArray , resArray ) ;
61
+ return [ uploadFile , uploading , snapshot , error ] ;
60
62
} ;
0 commit comments