Cara Implement Drag and Drop dengan Claude Code
Pelajari cara implement drag and drop menggunakan Claude Code. Dilengkapi contoh kode praktis dan panduan langkah demi langkah.
implementasipola drag&drop
drag&drop 直感的なUI 実現 pentingな機能.リスト並べ替え、カンバンボード、fileupload dll.多く 場面 使われ.Claude Code 使えば、アクセシブル robustなdrag&drop 効率よくimplementasi bisa dilakukan.
カスタムフックによるdasarimplementasi
> HTML Drag and Drop API 使ったReact カスタムフック buatkan.
> リスト 並べ替え support.
import { useState, useCallback, DragEvent } from 'react';
function useSortable<T extends { id: string }>(initialItems: T[]) {
const [items, setItems] = useState(initialItems);
const [draggedId, setDraggedId] = useState<string | null>(null);
const handleDragStart = useCallback((e: DragEvent, id: string) => {
setDraggedId(id);
e.dataTransfer.effectAllowed = 'move';
e.dataTransfer.setData('text/plain', id);
}, []);
const handleDragOver = useCallback((e: DragEvent, targetId: string) => {
e.preventDefault();
e.dataTransfer.dropEffect = 'move';
if (draggedId === null || draggedId === targetId) return;
setItems((prev) => {
const dragIndex = prev.findIndex((item) => item.id === draggedId);
const targetIndex = prev.findIndex((item) => item.id === targetId);
const newItems = [...prev];
const [removed] = newItems.splice(dragIndex, 1);
newItems.splice(targetIndex, 0, removed);
return newItems;
});
}, [draggedId]);
const handleDragEnd = useCallback(() => {
setDraggedId(null);
}, []);
return { items, draggedId, handleDragStart, handleDragOver, handleDragEnd, setItems };
}
sortdimungkinkanなリストkomponen
function SortableList({ initialTasks }: { initialTasks: Task[] }) {
const { items, draggedId, handleDragStart, handleDragOver, handleDragEnd } =
useSortable(initialTasks);
return (
<ul role="listbox" aria-label="taskdaftar(並べ替えdimungkinkan)">
{items.map((task) => (
<li
key={task.id}
draggable
role="option"
aria-grabbed={draggedId === task.id}
onDragStart={(e) => handleDragStart(e, task.id)}
onDragOver={(e) => handleDragOver(e, task.id)}
onDragEnd={handleDragEnd}
className={`p-3 mb-2 rounded border cursor-grab ${
draggedId === task.id ? 'opacity-50 border-blue-400' : 'border-gray-200'
}`}
>
<span>{task.title}</span>
</li>
))}
</ul>
);
}
filedropゾーン
> file drag&drop dengan upload dengan きるkomponen buatkan.
> previewtampilan dan validasi juga 。
function FileDropZone({ onFiles, accept, maxSize = 5 * 1024 * 1024 }: DropZoneProps) {
const [isDragging, setIsDragging] = useState(false);
const [errors, setErrors] = useState<string[]>([]);
const validateFiles = (files: File[]): File[] => {
const errs: string[] = [];
const valid = files.filter((file) => {
if (accept && !accept.includes(file.type)) {
errs.push(`${file.name}: dukungan い tidakfile形式 す`);
return false;
}
if (file.size > maxSize) {
errs.push(`${file.name}: fileサイズ 上限 超えています`);
return false;
}
return true;
});
setErrors(errs);
return valid;
};
const handleDrop = (e: DragEvent<HTMLDivElement>) => {
e.preventDefault();
setIsDragging(false);
const files = Array.from(e.dataTransfer.files);
const valid = validateFiles(files);
if (valid.length > 0) onFiles(valid);
};
return (
<div
onDragOver={(e) => { e.preventDefault(); setIsDragging(true); }}
onDragLeave={() => setIsDragging(false)}
onDrop={handleDrop}
className={`border-2 border-dashed rounded-lg p-8 text-center transition-colors ${
isDragging ? 'border-blue-500 bg-blue-50' : 'border-gray-300'
}`}
>
<p>ファイルをここにドロップ、またはクリックして選択</p>
{errors.map((err, i) => (
<p key={i} className="text-red-500 text-sm mt-1">{err}</p>
))}
</div>
);
}
サポート キーボードoperasi
アクセシビリティ untuk キーボード juga operasi きる agar .
const handleKeyDown = (e: React.KeyboardEvent, index: number) => {
if (e.key === ' ' || e.key === 'Enter') {
e.preventDefault();
toggleGrabbed(index);
}
if (e.key === 'ArrowUp' && isGrabbed) {
e.preventDefault();
moveItem(index, index - 1);
}
if (e.key === 'ArrowDown' && isGrabbed) {
e.preventDefault();
moveItem(index, index + 1);
}
};
Summary
Untuk Claude Codeを使えば、リスト並べ替えからfileuploadまで、多様なdrag&dropimplementasiをefisienにpembangunanできます。fileuploadの詳細はfileuploadimplementasiを、アクセシビリティdukungan, lihat アクセシビリティガイド.
HTML Drag and Drop API 仕様 MDN Web Docs silakan lihat.
Related Posts
10 Tips untuk Melipatgandakan Produktivitas dengan Claude Code
Temukan 10 tips praktis untuk memaksimalkan Claude Code. Dari strategi prompt hingga shortcut workflow, teknik-teknik ini akan meningkatkan efisiensimu mulai hari ini.
Optimasi Canvas/WebGL dengan Claude Code
Pelajari tentang optimasi Canvas/WebGL menggunakan Claude Code. Tips praktis dan contoh kode disertakan.
Markdown Implementation dengan Claude Code
Pelajari tentang markdown implementation menggunakan Claude Code. Dilengkapi tips praktis dan contoh kode.