0Pricing
React Academy · Pelajaran

Antarmuka Unggah File dengan Seret dan Lepas

Bangun zona seret dan lepas dengan event onDragOver/onDrop serta umpan balik visual.

Antarmuka Unggah File dengan Seret dan Lepas adalah pelajaran React Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar React Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus React Academy mencakup 4 pelajaran total.

Selamat datang

Dalam pelajaran ini, Anda akan membuat area pengunggahan berkas dengan seret dan lepas di React menggunakan peristiwa seret bawaan dan umpan balik visual untuk memandu pengguna.

Ikhtisar Peristiwa Seret

Peramban memicu peristiwa seret ketika berkas diseret melewati elemen. Peristiwa utamanya adalah: `dragover` (berkas berada di atas elemen), `dragleave` (berkas meninggalkan elemen), dan `drop` (berkas dilepaskan).

Mencegah Perilaku Bawaan

Secara bawaan, melepaskan berkas ke peramban akan membuka berkas tersebut. Panggil `e.preventDefault()` di `onDragOver` dan `onDrop` untuk mencegahnya.
const handleDragOver = (e) => {
  e.preventDefault();
};
const handleDrop = (e) => {
  e.preventDefault();
  const files = Array.from(e.dataTransfer.files);
  // process files
};

Status Aktif Visual

Lacak apakah berkas sedang diseret melewati area tersebut dengan state boolean. Alihkan kelas CSS untuk memberikan umpan balik visual kepada pengguna, misalnya garis tepi yang disorot.
const [isDragging, setIsDragging] = useState(false);

<div
  className={isDragging ? 'zone active' : 'zone'}
  onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }}
  onDragLeave={() => setIsDragging(false)}
  onDrop={handleDrop}
>

Membaca Berkas yang Dilepaskan

Berkas yang dilepaskan terdapat di `e.dataTransfer.files` — sebuah FileList. Ubah menjadi larik dan proses berkas tersebut.
const handleDrop = (e) => {
  e.preventDefault();
  setIsDragging(false);
  const files = Array.from(e.dataTransfer.files);
  setSelectedFiles(files);
};

Menggabungkan Penelusuran dengan Klik

Buat area pelepasan juga dapat diklik dengan merender input berkas tersembunyi dan mengekliknya secara terprogram ketika area tersebut diklik.
const inputRef = useRef();

<div onClick={() => inputRef.current.click()} ...>
  Drop files here or click to browse
</div>
<input
  ref={inputRef}
  type="file"
  multiple
  hidden
  onChange={(e) => setSelectedFiles(Array.from(e.target.files))}
/>

Menampilkan Pratinjau Berkas

Gunakan pemetaan pada berkas yang dipilih untuk menampilkan nama dan ukurannya. Untuk berkas gambar, buat URL pratinjau dengan URL.createObjectURL dan cabut URL tersebut dalam efek pembersihan.

Menghapus Berkas Sebelum Diunggah

Izinkan pengguna menghapus berkas sebelum pengunggahan dengan menyaring larik berkas yang dipilih. Perbarui state dengan larik hasil penyaringan.
const removeFile = (index) =>
  setSelectedFiles(files => files.filter((_, i) => i !== index));

dragenter vs dragover

Gunakan `dragenter` untuk mendeteksi saat proses seret pertama kali memasuki area dan `dragover` untuk mempertahankan status aktif selama kursor berada di atasnya. Gunakan penghitung untuk anak bersarang: tambah nilainya saat `dragenter`, kurangi saat `dragleave`, dan atur ulang saat `drop`.

Pustaka Pihak Ketiga

Untuk area pelepasan di lingkungan produksi, pertimbangkan **react-dropzone** — pustaka ini menangani kejanggalan peramban, atribut ARIA, penyaringan jenis berkas, dan berbagai mode pengunggahan secara langsung.
import { useDropzone } from 'react-dropzone';
const { getRootProps, getInputProps, isDragActive } = useDropzone({
  onDrop: acceptedFiles => setFiles(acceptedFiles),
  accept: { 'image/*': [] },
});

Pemeriksaan Singkat

Mengapa Anda harus memanggil e.preventDefault() dalam pengendali onDragOver?

Rangkuman

Buat area pelepasan dengan peristiwa onDragOver, onDragLeave, dan onDrop. Selalu panggil e.preventDefault() pada dragover dan drop. Lacak state isDragging untuk memberikan umpan balik visual. Gabungkan dengan input berkas tersembunyi agar pengguna dapat menelusuri berkas dengan klik.

Berikutnya

Pelajaran berikutnya: **Mengunggah Berkas ke API Sisi Server** — Anda akan menggunakan FormData dan fetch untuk melakukan POST berkas serta melacak kemajuan pengunggahan.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Antarmuka Unggah File dengan Seret dan Lepas” gratis?

Ya — teks lengkap “Antarmuka Unggah File dengan Seret dan Lepas” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus React Academy, upgrade ke CoddyKit PRO. Kursus React Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Antarmuka Unggah File dengan Seret dan Lepas”?

Bangun zona seret dan lepas dengan event onDragOver/onDrop serta umpan balik visual. Kamu berlatih React Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai React Academy?

Tidak diperlukan pengalaman sebelumnya. React Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Antarmuka Unggah File dengan Seret dan Lepas” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran React Academy ini?

Ya. Setiap pelajaran React Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Input Tak Terkontrol dengan useRef
  2. Input File dan Membaca Data File
  3. Antarmuka Unggah File dengan Seret dan Lepas
  4. Mengunggah File ke API Backend
← Kembali ke React Academy