context.tsx 1.0 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { FC, createContext, useRef, useState } from 'react';
  2. import { HandleUploadingFileNumType } from './types';
  3. export const DageUploadContext = createContext<{
  4. /**
  5. * 是否上传中
  6. */
  7. uploading: boolean;
  8. handleUploadingFileNum: (type: HandleUploadingFileNumType) => void;
  9. } | null>(null);
  10. export const DageUploadConsumer = DageUploadContext.Consumer;
  11. export const DageUploadProvider: FC<{
  12. children: React.ReactNode;
  13. }> = (props) => {
  14. /** 待上传文件数量 */
  15. const uploadingFileNum = useRef(0);
  16. const [uploading, setUploading] = useState(false);
  17. const handleUploadingFileNum = (type: HandleUploadingFileNumType) => {
  18. if (type === 'add') {
  19. uploadingFileNum.current += 1;
  20. setUploading(true);
  21. } else {
  22. uploadingFileNum.current -= 1;
  23. if (uploading && !uploadingFileNum.current) {
  24. setUploading(false);
  25. }
  26. }
  27. };
  28. return (
  29. <DageUploadContext.Provider value={{ uploading, handleUploadingFileNum }}>
  30. {props.children}
  31. </DageUploadContext.Provider>
  32. );
  33. };