1- import React , { useState } from 'react'
2- import { Loading , Star } from '@nutui/icons-react'
3- import { Uploader , Button , FileItem } from '@nutui/nutui-react-taro'
1+ import React , { useRef } from 'react'
2+ import { Uploader , Button , Cell } from '@nutui/nutui-react-taro'
3+ import { View } from '@tarojs/components'
4+
5+ interface uploadRefState {
6+ submit : ( ) => void
7+ clear : ( ) => void
8+ }
49
510const Demo9 = ( ) => {
6- const [ list , setList ] = useState < FileItem [ ] > ( [
7- {
8- name : '文件文件文件文件1文件文件文件文件1文件文件文件文件1.png' ,
9- url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
10- status : 'success' ,
11- message : '上传成功' ,
12- } ,
13- {
14- name : '文件2.png' ,
15- url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
16- status : 'success' ,
17- message : '上传成功' ,
18- } ,
19- {
20- name : '文件3.png' ,
21- url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
22- status : 'error' ,
23- message : '上传失败' ,
24- failIcon : < Star style = { { color : 'white' } } /> ,
25- } ,
26- {
27- name : '文件444.png' ,
28- url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
29- status : 'uploading' ,
30- message : '上传中...' ,
31- } ,
32- {
33- name : '文件555.png' ,
34- url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
35- status : 'uploading' ,
36- message : '上传中...' ,
37- loadingIcon : < Loading className = "nut-icon-Loading" color = "#fff" /> ,
38- } ,
39- ] )
11+ const uploadRef = useRef < uploadRefState > ( null )
4012 function sleep ( time : number ) {
4113 return new Promise < void > ( ( resolve ) => {
4214 setTimeout ( ( ) => {
@@ -46,27 +18,40 @@ const Demo9 = () => {
4618 }
4719 async function upload ( file : File ) {
4820 await sleep ( 2000 )
49- if ( Math . random ( ) < 0.5 ) {
50- return {
51- url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
52- }
21+ return {
22+ url : 'https://m.360buyimg.com/babel/jfs/t1/164410/22/25162/93384/616eac6cE6c711350/0cac53c1b82e1b05.gif' ,
5323 }
54- throw new Error ( 'Fail to upload' )
24+ }
25+ const submitUpload = ( ) => {
26+ ; ( uploadRef . current as uploadRefState ) . submit ( )
27+ }
28+ const clearUpload = ( ) => {
29+ ; ( uploadRef . current as uploadRefState ) . clear ( )
5530 }
5631 return (
57- < Uploader
58- upload = { ( file : File ) => upload ( file ) }
59- value = { list }
60- onChange = { setList }
61- maxCount = "10"
62- multiple
63- previewType = "list"
64- style = { { marginBottom : 20 } }
65- >
66- < Button type = "success" size = "small" >
67- 上传文件
68- </ Button >
69- </ Uploader >
32+ < Cell style = { { display : 'flex' , flexDirection : 'column' } } >
33+ < Uploader
34+ maxCount = "5"
35+ multiple
36+ autoUpload = { false }
37+ ref = { uploadRef }
38+ upload = { ( file : File ) => upload ( file ) }
39+ style = { { marginBottom : 10 } }
40+ />
41+ < View style = { { display : 'flex' } } >
42+ < Button
43+ type = "success"
44+ size = "small"
45+ onClick = { submitUpload }
46+ style = { { marginRight : '10px' } }
47+ >
48+ 执行上传
49+ </ Button >
50+ < Button type = "primary" size = "small" onClick = { clearUpload } >
51+ 手动清空上传
52+ </ Button >
53+ </ View >
54+ </ Cell >
7055 )
7156}
7257export default Demo9
0 commit comments