ຄຳຖາມທີ່ຖາມເລື້ອຍໆ
ຄຳຖາມ ແລະຄຳຕອບທົ່ວໄປກ່ຽວກັບ Dropup.
ທົ່ວໄປ
Dropup ແມ່ນຫຍັງ?
Dropup ແມ່ນໄລບຣາຣີ React ທີ່ມີນ້ຳໜັກເບົາ ແລະບໍ່ມີສ່ວນຕິດຕໍ່ຜູ້ໃຊ້ສຳເລັດຮູບ ສຳລັບການອັບໂຫຼດໄຟລ໌. ມັນໃຫ້ການລາກ ແລະວາງ, ການກວດສອບໄຟລ໌, ການຕິດຕາມຄວາມຄືບໜ້າການອັບໂຫຼດ, ແລະການຮອງຮັບການເກັບຂໍ້ມູນຄລາວ - ທັງໝົດໃນແພັກເກດທີ່ມີຂະໜາດຕ່ຳກວ່າ 10KB ເມື່ອບີບອັດ.
ເປັນຫຍັງຈຶ່ງເອີ້ນວ່າ "headless"?
Headless ໝາຍຄວາມວ່າ Dropup ບໍ່ໄດ້ລວມເອົາອົງປະກອບ UI ໃດໆ. ມັນໃຫ້ຕາລະກະ ແລະການຈັດການສະຖານະ, ໃນຂະນະທີ່ທ່ານສ້າງ UI ຕາມທີ່ທ່ານຕ້ອງການ. ນີ້ໃຫ້ການຄວບຄຸມລັກສະນະ ແລະຄວາມຮູ້ສຶກຢ່າງສົມບູນ.
ຂະໜາດ bundle ແມ່ນເທົ່າໃດ?
- Core (
@samithahansaka/dropup): < 10KB ເມື່ອບີບອັດ - ກັບການຮອງຮັບຄລາວ: +2KB ຕໍ່ຜູ້ໃຫ້ບໍລິການ
- ກັບການປຸງແຕ່ງຮູບພາບ: +5KB
- ກັບໂປຣໂຕຄອນ tus: +3KB (ຕ້ອງການ tus-js-client ເປັນ peer)
ຮອງຮັບ TypeScript ບໍ?
ແມ່ນແລ້ວ! Dropup ຖືກຂຽນດ້ວຍ TypeScript ແລະລວມເອົາຄຳນິຍາມປະເພດທີ່ສົມບູນ. ບໍ່ຕ້ອງການແພັກເກດ @types.
ຕ້ອງການ React ເວີຊັນໃດ?
React 16.8+ (ຕ້ອງການການຮອງຮັບ hooks).
ການນຳໃຊ້
ຂ້ອຍຈະອັບໂຫຼດໄຟລ໌ແນວໃດ?
const { files, actions } = useDropup({
upload: { url: '/api/upload' },
});
// ອັບໂຫຼດໄຟລ໌ທັງໝົດ
actions.upload();
// ອັບໂຫຼດໄຟລ໌ສະເພາະ
actions.upload(['file-id-1', 'file-id-2']);
ຂ້ອຍຈະຈັດການກັບຂໍ້ຜິດພາດການກວດສອບແນວໃດ?
useDropup({
accept: 'image/*',
maxSize: 5 * 1024 * 1024,
onValidationError: (errors) => {
errors.forEach(({ file, errors }) => {
console.log(`${file.name}: ${errors.join(', ')}`);
});
},
});
ຂ້ອຍສາມາດໃຊ້ຕາລະກະການອັບໂຫຼດແບບກຳນົດເອງໄດ້ບໍ?
ໄດ້! ສົ່ງຟັງຊັນແທນອອບເຈັກການຕັ້ງຄ່າ:
useDropup({
upload: async (file, options) => {
const { signal, onProgress } = options;
// ຕາລະກະການອັບໂຫຼດແບບກຳນົດເອງຂອງທ່ານ
const response = await customUpload(file.file, {
signal,
onProgress,
});
return { url: response.url };
},
});
ຂ້ອຍຈະເພີ່ມໄຟລ໌ດ້ວຍໂປຣແກຣມແນວໃດ?
const { actions } = useDropup();
// ຈາກ clipboard
document.addEventListener('paste', (e) => {
const files = e.clipboardData?.files;
if (files) {
actions.addFiles(files);
}
});
ຂ້ອຍສາມາດມີຫຼາຍພື້ນທີ່ວາງໄດ້ບໍ?
ໄດ້! ແຕ່ລະການເອີ້ນ useDropup ສ້າງ instance ທີ່ເປັນອິດສະຫຼະ:
const images = useDropup({ accept: 'image/*' });
const documents = useDropup({ accept: '.pdf' });
// ໃຊ້ແຍກກັນ
<div {...images.getDropProps()}>...</div>
<div {...documents.getDropProps()}>...</div>
ການອັບໂຫຼດ
ຂ້ອຍຈະສະແດງຄວາມຄືບໜ້າການອັບໂຫຼດແນວໃດ?
const { files } = useDropup({ upload: { url: '/api/upload' } });
{files.map(file => (
<div key={file.id}>
{file.name}: {file.progress}%
</div>
))}
ຂ້ອຍຈະຍົກເລີກການອັບໂຫຼດແນວໃດ?
const { actions } = useDropup();
// ຍົກເລີກໄຟລ໌ສະເພາະ
actions.cancel('file-id');
// ຍົກເລີກການອັບໂຫຼດທັງໝົດ
actions.cancel();
ຂ້ອຍຈະລອງໃໝ່ການອັບໂຫຼດທີ່ລົ້ມເຫຼວແນວໃດ?
const { actions } = useDropup();
// ລອງໃໝ່ໄຟລ໌ສະເພາະ
actions.retry(['file-id']);
// ລອງໃໝ່ທັງໝົດທີ່ລົ້ມເຫຼວ
actions.retry();
ຮອງຮັບການອັບໂຫຼດແບບແບ່ງສ່ວນບໍ?
ແມ່ນແລ້ວ! ໃຊ້ createChunkedUploader:
import { createChunkedUploader } from '@samithahansaka/dropup';
useDropup({
upload: createChunkedUploader({
url: '/api/upload/chunk',
chunkSize: 5 * 1024 * 1024, // 5MB
}),
});
ຂ້ອຍສາມາດອັບໂຫຼດໄປ S3 ໂດຍກົງໄດ້ບໍ?
ໄດ້! ໃຊ້ cloud uploader:
import { createS3Uploader } from '@samithahansaka/dropup/cloud/s3';
useDropup({
upload: createS3Uploader({
getPresignedUrl: async (file) => {
const res = await fetch('/api/s3/presign', {
method: 'POST',
body: JSON.stringify({ filename: file.name }),
});
return res.json();
},
}),
});
ການກວດສອບ
ຂ້ອຍຈະຈຳກັດປະເພດໄຟລ໌ແນວໃດ?
// ໂດຍປະເພດ MIME
useDropup({ accept: 'image/*' });
// ໂດຍນາມສະກຸນ
useDropup({ accept: '.pdf, .doc' });
// ຫຼາຍປະເພດ
useDropup({ accept: ['image/*', 'application/pdf'] });
ຂ້ອຍຈະຕັ້ງຄ່າຂີດຈຳກັດຂະໜາດແນວໃດ?
useDropup({
maxSize: 10 * 1024 * 1024, // ສູງສຸດ 10MB
minSize: 1024, // ຕ່ຳສຸດ 1KB
});
ຂ້ອຍຈະຈຳກັດຈຳນວນໄຟລ໌ແນວໃດ?
useDropup({
maxFiles: 5,
});
ຂ້ອຍສາມາດເພີ່ມການກວດສອບແບບກຳນົດເອງໄດ້ບໍ?
ໄດ້! ໃຊ້ customRules:
useDropup({
customRules: [
(file) => {
if (file.name.includes('draft')) {
return 'ບໍ່ອະນຸຍາດໄຟລ໌ຮ່າງ';
}
return true;
},
],
});
ການສະແດງຕົວຢ່າງ
ຂ້ອຍຈະສະແດງຕົວຢ່າງຮູບພາບແນວໃດ?
ຕົວຢ່າງຖືກເປີດໃຊ້ງານໂດຍຄ່າເລີ່ມຕົ້ນ:
const { files } = useDropup();
{files.map(file => (
file.preview && <img src={file.preview} alt="" />
))}
ຂ້ອຍຕ້ອງລ້າງ URL ຕົວຢ່າງບໍ?
ບໍ່ຕ້ອງ! Dropup ຖອນ Object URLs ໂດຍອັດຕະໂນມັດເມື່ອໄຟລ໌ຖືກລຶບ ຫຼືອົງປະກອບຖືກ unmount.
ຂ້ອຍສາມາດປິດການສະແດງຕົວຢ່າງໄດ້ບໍ?
useDropup({ generatePreviews: false });
ການແກ້ໄຂບັນຫາ
ໄຟລ໌ບໍ່ໄດ້ອັບໂຫຼດ
-
ກວດສອບວ່າ
uploadຖືກຕັ້ງຄ່າແລ້ວ:useDropup({ upload: { url: '/api/upload' } }); -
ໃຫ້ແນ່ໃຈວ່າທ່ານເອີ້ນ
actions.upload()(ເວັ້ນເສຍແຕ່autoUpload: true) -
ກວດສອບ console ຂອງບຣາວເຊີສຳລັບຂໍ້ຜິດພາດເຄືອຂ່າຍ
URL ຕົວຢ່າງບໍ່ເຮັດວຽກ
- ໃຫ້ແນ່ໃຈວ່າໄຟລ໌ແມ່ນຮູບພາບ
- ກວດສອບວ່າ
generatePreviewsບໍ່ແມ່ນfalse - ຢືນຢັນວ່າອອບເຈັກໄຟລ໌ມີຄຸນສົມບັດ
previewທີ່ຖືກຕ້ອງ
ການລາກ ແລະວາງບໍ່ເຮັດວຽກ
- ໃຫ້ແນ່ໃຈວ່າທ່ານ spread
getDropProps()ໃສ່ອົງປະກອບ container - ລວມ input ທີ່ເຊື່ອງໄວ້:
<input {...getInputProps()} /> - ກວດສອບວ່າ
disabledບໍ່ແມ່ນtrue
ຂໍ້ຜິດພາດ TypeScript
- ອັບເດດເປັນ Dropup ເວີຊັນຫຼ້າສຸດ
- ໃຫ້ແນ່ໃຈວ່າ
tsconfig.jsonມີmoduleResolutionທີ່ເໝາະສົມ - ກວດສອບວ່າ
@samithahansaka/dropupຢູ່ໃນdependencies, ບໍ່ແມ່ນdevDependencies
ການຮົ່ວໄຫຼຂອງໜ່ວຍຄວາມຈຳ
- ໃຫ້ແນ່ໃຈວ່າອົງປະກອບທີ່ໃຊ້
useDropupຖືກ unmount ຢ່າງຖືກຕ້ອງ - ເອີ້ນ
actions.reset()ກ່ອນການ unmount ຖ້າຈຳເປັນ - ບໍ່ຄວນເກັບໄຟລ໌ໃນ state ພາຍນອກໂດຍບໍ່ມີການລ້າງ
ຄວາມເຂົ້າກັນໄດ້
ເຮັດວຽກກັບ Next.js ບໍ?
ແມ່ນແລ້ວ! ໃຊ້ directive 'use client':
'use client';
import { useDropup } from '@samithahansaka/dropup';
ເຮັດວຽກກັບ React Native ບໍ?
ແມ່ນແລ້ວ! ໃຊ້ native adapter:
import { NativeAdapter } from '@samithahansaka/dropup/native';
useDropup({ adapter: NativeAdapter });
ຮອງຮັບ SSR ບໍ?
ແມ່ນແລ້ວ! Dropup ປອດໄພກັບ SSR. ມັນໃຊ້ API ຂອງບຣາວເຊີພຽງແຕ່ເມື່ອມັນມີຢູ່.
ຮອງຮັບບຣາວເຊີໃດ?
ບຣາວເຊີທັນສະໄໝທັງໝົດ:
- Chrome 60+
- Firefox 55+
- Safari 12+
- Edge 79+
ການປະກອບສ່ວນ
ຂ້ອຍຈະປະກອບສ່ວນແນວໃດ?
- Fork ບ່ອນເກັບຂໍ້ມູນ
- ສ້າງ branch ສຳລັບຄຸນສົມບັດ
- ສົ່ງ pull request
ເບິ່ງ CONTRIBUTING.md ສຳລັບລາຍລະອຽດ.
ຂ້ອຍຈະລາຍງານ bug ແນວໃດ?
ເປີດ issue ທີ່ github.com/samithahansaka/dropup/issues.
ມີ roadmap ບໍ?
ກວດສອບ issues ແລະ discussions ຂອງ GitHub ສຳລັບຄຸນສົມບັດທີ່ວາງແຜນໄວ້.