0Pricing
React Academy · Lekcja

Interfejs przesyłania plików metodą przeciągnij i upuść

Zbuduj strefę przeciągania i upuszczania z użyciem zdarzeń onDragOver/onDrop oraz informacji zwrotnej w interfejsie

Interfejs przesyłania plików metodą przeciągnij i upuść to bezpłatna lekcja React Academy na CoddyKit. To lekcja 3 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej React Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs React Academy zawiera 4 lekcji w sumie.

Witamy

W tej lekcji zbuduje Pani/Pan w React strefę przesyłania plików metodą przeciągnij i upuść, korzystając z natywnych zdarzeń przeciągania oraz wizualnych informacji zwrotnych dla użytkowników.

Przegląd zdarzeń przeciągania

Przeglądarka wywołuje zdarzenia przeciągania, gdy pliki są przeciągane nad elementami. Najważniejsze zdarzenia to: `dragover` (plik znajduje się nad elementem), `dragleave` (plik opuszcza element) oraz `drop` (plik zostaje upuszczony).

Zapobieganie domyślnemu działaniu

Domyślnie upuszczenie pliku w przeglądarce powoduje przejście do tego pliku. Należy wywołać `e.preventDefault()` zarówno w `onDragOver`, jak i w `onDrop`, aby temu zapobiec.
const handleDragOver = (e) => {
  e.preventDefault();
};
const handleDrop = (e) => {
  e.preventDefault();
  const files = Array.from(e.dataTransfer.files);
  // process files
};

Wizualny stan aktywny

Należy śledzić za pomocą stanu typu boolean, czy plik jest przeciągany nad strefą. Należy przełączać klasę CSS, aby zapewnić użytkownikom wizualną informację zwrotną, na przykład podświetloną ramkę.
const [isDragging, setIsDragging] = useState(false);

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

Odczytywanie upuszczonych plików

Upuszczone pliki znajdują się w `e.dataTransfer.files` — obiekcie typu FileList. Należy przekonwertować go na tablicę i przetworzyć pliki.
const handleDrop = (e) => {
  e.preventDefault();
  setIsDragging(false);
  const files = Array.from(e.dataTransfer.files);
  setSelectedFiles(files);
};

Połączenie z wybieraniem pliku

Należy sprawić, aby strefa upuszczania była również klikalna, renderując ukryty input pliku i programowo klikając go po kliknięciu strefy.
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))}
/>

Wyświetlanie podglądów plików

Należy użyć mapowania po wybranych plikach, aby wyświetlić ich nazwy i rozmiary. W przypadku plików graficznych należy generować adresy URL podglądów za pomocą URL.createObjectURL i unieważniać je w efekcie czyszczącym.

Usuwanie plików przed przesłaniem

Należy umożliwić użytkownikom usuwanie plików przed przesłaniem, filtrując tablicę wybranych plików. Następnie należy zaktualizować stan za pomocą przefiltrowanej tablicy.
const removeFile = (index) =>
  setSelectedFiles(files => files.filter((_, i) => i !== index));

dragenter a dragover

Należy używać `dragenter`, aby wykryć pierwsze wejście przeciąganego elementu do strefy, oraz `dragover`, aby utrzymywać stan aktywny podczas najechania. W przypadku zagnieżdżonych elementów należy użyć licznika: zwiększać go przy `dragenter`, zmniejszać przy `dragleave` i resetować przy `drop`.

Biblioteki zewnętrzne

W przypadku produkcyjnych stref upuszczania warto rozważyć bibliotekę **react-dropzone** — obsługuje ona niuanse przeglądarek, atrybuty ARIA, filtrowanie typów plików i wiele trybów przesyłania od razu po instalacji.
import { useDropzone } from 'react-dropzone';
const { getRootProps, getInputProps, isDragActive } = useDropzone({
  onDrop: acceptedFiles => setFiles(acceptedFiles),
  accept: { 'image/*': [] },
});

Szybkie sprawdzenie

Dlaczego w procedurze obsługi onDragOver należy wywołać e.preventDefault()?

Podsumowanie

Należy zbudować strefę upuszczania z użyciem zdarzeń onDragOver, onDragLeave i onDrop. Zawsze należy wywoływać e.preventDefault() podczas przeciągania i upuszczania. Należy śledzić stan isDragging, aby zapewnić wizualną informację zwrotną. Następnie należy połączyć strefę z ukrytym inputem pliku, aby umożliwić wybieranie pliku po kliknięciu.

Następny temat

Następna lekcja: **Przesyłanie plików do backendowego API** — zostaną użyte FormData i fetch do wysyłania plików metodą POST oraz śledzenia postępu przesyłania.

Często zadawane pytania

Czy lekcja „Interfejs przesyłania plików metodą przeciągnij i upuść” jest bezpłatna?

Tak — pełny tekst „Interfejs przesyłania plików metodą przeciągnij i upuść” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu React Academy, przejdź na CoddyKit PRO. Kurs React Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Interfejs przesyłania plików metodą przeciągnij i upuść”?

Zbuduj strefę przeciągania i upuszczania z użyciem zdarzeń onDragOver/onDrop oraz informacji zwrotnej w interfejsie Ćwiczysz React Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć React Academy?

Nie wymagamy żadnego doświadczenia. React Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 3 z 4.

Ile czasu zajmuje lekcja „Interfejs przesyłania plików metodą przeciągnij i upuść”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji React Academy?

Tak. Każda lekcja React Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Niekontrolowane pola wejściowe z useRef
  2. Pole wyboru pliku i odczytywanie danych pliku
  3. Interfejs przesyłania plików metodą przeciągnij i upuść
  4. Przesyłanie plików do backendowego API
← Powrót do React Academy