ວິທີການເຮັດວຽກຂອງ Dropup
Dropup ຖືກສ້າງຂຶ້ນບົນແນວຄວາມຄິດຂອງ UI ແບບບໍ່ມີສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ - ມັນຈັດການກັບຕາລະກະການອັບໂຫຼດໄຟລ໌ທີ່ຊັບຊ້ອນທັງໝົດໃນຂະນະທີ່ໃຫ້ການຄວບຄຸມການນຳສະເໜີທາງສາຍຕາຢ່າງສົມບູນ.
ສະຖາປັດຕະຍະກຳ
┌─────────────────────────────────────────────────────────────┐
│ ອົງປະກອບ React ຂອງທ່ານ │
├─────────────────────────────────────────────────────────────┤
│ ┌─────────────┐ ┌─────────────┐ ┌─────────────────────┐ │
│ │ ພື້ນທີ່ວາງ │ │ ລາຍການໄຟລ໌ │ │ ປຸ່ມອັບໂຫຼດ │ │
│ │ (UI ຂອງທ່ານ) │ │ (UI ຂອງທ່ານ) │ │ (UI ຂອງທ່ານ) │ │
│ └──────┬──────┘ └──────┬──────┘ └──────────┬──────────┘ │
│ │ │ │ │
│ ▼ ▼ ▼ │
│ ┌─────────────────────────────────────────────────────────┐│
│ │ Hook useDropup ││
│ │ ┌───────────┐ ┌───────────┐ ┌───────────┐ ┌─────────┐ ││
│ │ │ ເຄື່ອງຈັກ │ │ ຕົວຈັດການ │ │ ເຄື່ອງຈັກ │ │ ອະແດັບເຕີ│ ││
│ │ │ ກວດສອບ │ │ ສະຖານະ │ │ ອັບໂຫຼດ │ │ ແພລດຟອມ │ ││
│ │ └───────────┘ └───────────┘ └───────────┘ └─────────┘ ││
│ └─────────────────────────────────────────────────────────┘│
└─────────────────────────────────────────────────────────────┘
ອົງປະກອບຫຼັກ
1. ຕົວຈັດການສະຖານະ
Dropup ໃຊ້ useReducer ຂອງ React ສຳລັບການຈັດການສະຖານະທີ່ຄາດເດົາໄດ້:
- ຕິດຕາມໄຟລ໌ທັງໝົດ ແລະສະຖານະຂອງພວກມັນ
- ຈັດການສະຖານະການລາກ
- ຈັດການຄວາມຄືບໜ້າການອັບໂຫຼດ
- ໃຫ້ຄ່າທີ່ຄຳນວນແລ້ວ
2. ເຄື່ອງຈັກກວດສອບ
ກ່ອນໄຟລ໌ຖືກເພີ່ມ, ພວກມັນຜ່ານການກວດສອບ:
const { files } = useDropup({
accept: 'image/*', // ການກວດສອບປະເພດໄຟລ໌
maxSize: 5 * 1024 * 1024, // ຂະໜາດໄຟລ໌ສູງສຸດ
minSize: 1024, // ຂະໜາດໄຟລ໌ຕ່ຳສຸດ
maxFiles: 10, // ຈຳນວນໄຟລ໌ສູງສຸດ
maxWidth: 4096, // ຄວາມກວ້າງຮູບພາບສູງສຸດ
maxHeight: 4096, // ຄວາມສູງຮູບພາບສູງສຸດ
customRules: [ // ການກວດສອບແບບກຳນົດເອງ
(file) => file.name.length < 100 || 'ຊື່ໄຟລ໌ຍາວເກີນໄປ'
],
});
3. ເຄື່ອງຈັກອັບໂຫຼດ
ເຄື່ອງຈັກອັບໂຫຼດຈັດການ:
- ການອັບໂຫຼດແບບງ່າຍ (ຄຳຂໍດຽວຕໍ່ໄຟລ໌)
- ການອັບໂຫຼດແບບແບ່ງສ່ວນ (ແບ່ງໄຟລ໌ຂະໜາດໃຫຍ່)
- ຕາລະກະການລອງໃໝ່ດ້ວຍ exponential backoff
- ການຈັດການການອັບໂຫຼດພ້ອมກັນ
- ການຕິດຕາມຄວາມຄືບໜ້າ
4. ອະແດັບເຕີແພລດຟອມ
Dropup ເຮັດວຽກຂ້າມແພລດຟອມ:
- ເວັບ - ໃຊ້ API ບຣາວເຊີດັ້ງເດີມ
- React Native - ໃຊ້ການຈັດການໄຟລ໌ native
- SSR - ປອດໄພສຳລັບການ render ຝັ່ງເຊີບເວີ
ການໄຫຼຂອງຂໍ້ມູນ
ການກະທຳຂອງຜູ້ໃຊ້ → ການກວດສອບ → ອັບເດດສະຖານະ → ອັບໂຫຼດ → Callbacks
│ │ │ │ │
▼ ▼ ▼ ▼ ▼
ເລືອກ/ ຍອມຮັບ/ປະຕິເສດ files[] XHR/Fetch onComplete
ວາງໄຟລ໌ ອັບເດດ ຄວາມຄືບໜ້າ onError
ຫຼັກການອອກແບບ
1. ບໍ່ມີສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ກ່ອນ
ບໍ່ມີອົງປະກອບ UI ໃນຕົວ - ທ່ານສ້າງສິ່ງທີ່ທ່ານຕ້ອງການແທ້ໆ:
// ທ່ານຄວບຄຸມ UI ທັງໝົດ
<div {...getDropProps()}>
<YourCustomDropZone />
<input {...getInputProps()} />
</div>
2. ຄວາມປອດໄພທາງປະເພດ
ຮອງຮັບ TypeScript ຢ່າງເຕັມທີ່ດ້ວຍປະເພດທີ່ຄົບຖ້ວນ:
import type { DropupFile, UseDropupOptions } from '@samithahansaka/dropup';
const options: UseDropupOptions = {
accept: 'image/*',
onUploadComplete: (file: DropupFile) => {
console.log(file.uploadedUrl);
},
};
3. Tree Shakeable
ນຳເຂົ້າພຽງແຕ່ສິ່ງທີ່ທ່ານຕ້ອງການ:
// ແກນຫຼັກເທົ່ານັ້ນ (~10KB)
import { useDropup } from '@samithahansaka/dropup';
// ເພີ່ມການຮອງຮັບຄລາວເມື່ອຕ້ອງການ
import { createS3Uploader } from '@samithahansaka/dropup/cloud/s3';
// ເພີ່ມການປຸງແຕ່ງຮູບພາບເມື່ອຕ້ອງການ
import { compressImage } from '@samithahansaka/dropup/image';
4. ການເພີ່ມປະສິດທິພາບແບບກ້າວໜ້າ
ເລີ່ມຕົ້ນງ່າຍໆ, ເພີ່ມຄຸນສົມບັດຕາມຕ້ອງການ:
// ການນຳໃຊ້ພື້ນຖານ
const { files } = useDropup();
// ເພີ່ມການກວດສອບ
const { files } = useDropup({ maxSize: 10_000_000 });
// ເພີ່ມການອັບໂຫຼດອັດຕະໂນມັດ
const { files } = useDropup({
maxSize: 10_000_000,
upload: { url: '/api/upload' },
autoUpload: true,
});
// ເພີ່ມການເກັບຂໍ້ມູນຄລາວ
const { files } = useDropup({
upload: createS3Uploader({ getPresignedUrl }),
});