ຂ້າມໄປຫາເນື້ອຫາຫຼັກ

ຄຳຖາມທີ່ຖາມເລື້ອຍໆ

ຄຳຖາມ ແລະຄຳຕອບທົ່ວໄປກ່ຽວກັບ 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 });

ການແກ້ໄຂບັນຫາ

ໄຟລ໌ບໍ່ໄດ້ອັບໂຫຼດ

  1. ກວດສອບວ່າ upload ຖືກຕັ້ງຄ່າແລ້ວ:

    useDropup({ upload: { url: '/api/upload' } });
  2. ໃຫ້ແນ່ໃຈວ່າທ່ານເອີ້ນ actions.upload() (ເວັ້ນເສຍແຕ່ autoUpload: true)

  3. ກວດສອບ console ຂອງບຣາວເຊີສຳລັບຂໍ້ຜິດພາດເຄືອຂ່າຍ

URL ຕົວຢ່າງບໍ່ເຮັດວຽກ

  1. ໃຫ້ແນ່ໃຈວ່າໄຟລ໌ແມ່ນຮູບພາບ
  2. ກວດສອບວ່າ generatePreviews ບໍ່ແມ່ນ false
  3. ຢືນຢັນວ່າອອບເຈັກໄຟລ໌ມີຄຸນສົມບັດ preview ທີ່ຖືກຕ້ອງ

ການລາກ ແລະວາງບໍ່ເຮັດວຽກ

  1. ໃຫ້ແນ່ໃຈວ່າທ່ານ spread getDropProps() ໃສ່ອົງປະກອບ container
  2. ລວມ input ທີ່ເຊື່ອງໄວ້: <input {...getInputProps()} />
  3. ກວດສອບວ່າ disabled ບໍ່ແມ່ນ true

ຂໍ້ຜິດພາດ TypeScript

  1. ອັບເດດເປັນ Dropup ເວີຊັນຫຼ້າສຸດ
  2. ໃຫ້ແນ່ໃຈວ່າ tsconfig.json ມີ moduleResolution ທີ່ເໝາະສົມ
  3. ກວດສອບວ່າ @samithahansaka/dropup ຢູ່ໃນ dependencies, ບໍ່ແມ່ນ devDependencies

ການຮົ່ວໄຫຼຂອງໜ່ວຍຄວາມຈຳ

  1. ໃຫ້ແນ່ໃຈວ່າອົງປະກອບທີ່ໃຊ້ useDropup ຖືກ unmount ຢ່າງຖືກຕ້ອງ
  2. ເອີ້ນ actions.reset() ກ່ອນການ unmount ຖ້າຈຳເປັນ
  3. ບໍ່ຄວນເກັບໄຟລ໌ໃນ 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+

ການປະກອບສ່ວນ

ຂ້ອຍຈະປະກອບສ່ວນແນວໃດ?

  1. Fork ບ່ອນເກັບຂໍ້ມູນ
  2. ສ້າງ branch ສຳລັບຄຸນສົມບັດ
  3. ສົ່ງ pull request

ເບິ່ງ CONTRIBUTING.md ສຳລັບລາຍລະອຽດ.

ຂ້ອຍຈະລາຍງານ bug ແນວໃດ?

ເປີດ issue ທີ່ github.com/samithahansaka/dropup/issues.

ມີ roadmap ບໍ?

ກວດສອບ issues ແລະ discussions ຂອງ GitHub ສຳລັບຄຸນສົມບັດທີ່ວາງແຜນໄວ້.