Sürükleme ve Bırak Yeteneği
- react-draggable:
react-draggable, yalnızca öğeleri sürükleme yeteneği sağlar. Bırakma alanları veya çoklu sürükleme türleri gibi karmaşık özellikler sunmaz, ancak basit sürükleme işlemleri için yeterlidir. - react-dnd:
react-dnd, karmaşık sürükle ve bırak etkileşimleri oluşturmanıza olanak tanır. Özelleştirilmiş sürükleme ve bırak alanları, çoklu sürükleme türleri ve sürükleme işlemi sırasında geri bildirim sağlama gibi özellikler sunar. - react-zoom-pan-pinch:
react-zoom-pan-pinchkütüphanesi, sürükleme ile birlikte yakınlaştırma ve kaydırma etkileşimlerini destekler. Ancak, geleneksel sürükle ve bırak işlevselliği sağlamaz.
Kullanım Senaryoları
- react-draggable:
react-draggable, basit sürükleme etkileşimleri gerektiren uygulamalar için uygundur. Örneğin, bir resim galerisi uygulamasında resimleri sürükleyerek yeniden konumlandırmak için kullanılabilir. - react-dnd:
react-dnd, karmaşık sürükle ve bırak arayüzleri, özelleştirilmiş taşımalar veya birden fazla sürükleme alanı gerektiren uygulamalar için idealdir. Örneğin, bir görev yönetim uygulamasında görevleri farklı sütunlara taşımak için kullanılabilir. - react-zoom-pan-pinch:
react-zoom-pan-pinch, görsel içerik üzerinde yakınlaştırma ve kaydırma etkileşimleri eklemek isteyen uygulamalar için idealdir. Örneğin, bir harita uygulamasında kullanıcıların haritayı yakınlaştırıp kaydırarak daha fazla ayrıntı görmelerine olanak tanır.
Özelleştirme
- react-draggable:
react-draggable, sürükleme işlemini özelleştirmek için bazı temel ayarlar sunar. Ancak, özelleştirme seçeneklerireact-dndkadar kapsamlı değildir. - react-dnd:
react-dnd, sürükleme ve bırak etkileşimlerini özelleştirmek için geniş bir API sunar. Sürükleme türlerini, bırakma alanlarını ve etkileşim sırasında geri bildirimleri özelleştirebilirsiniz. - react-zoom-pan-pinch:
react-zoom-pan-pinch, yakınlaştırma, kaydırma ve sıkıştırma işlemlerini özelleştirmek için çeşitli ayarlar sunar. Ancak, sürükleme ve bırakma işlemleri için özelleştirme seçenekleri sınırlıdır.
Performans
- react-draggable:
react-draggable, basit ve hafif bir kütüphanedir, bu nedenle sürükleme işlemleri sırasında performans üzerinde minimal bir etkisi vardır. Büyük ölçekli uygulamalarda bile sorunsuz bir şekilde çalışır. - react-dnd:
react-dnd, karmaşık etkileşimler için optimize edilmiştir, ancak performans, uygulamanın karmaşıklığına bağlı olarak değişebilir. Gereksiz yeniden render işlemlerini önlemek için dikkatli bir şekilde yapılandırılmalıdır. - react-zoom-pan-pinch:
react-zoom-pan-pinch, yakınlaştırma ve kaydırma işlemleri sırasında performansı korumak için optimize edilmiştir. Ancak, çok fazla görsel içerik ile çalışırken dikkatli olunmalıdır.
Kod Örneği
- react-draggable:
Basit Sürükleme Örneği
import React from 'react'; import Draggable from 'react-draggable'; const App = () => ( <Draggable> <div style={{ width: '100px', height: '100px', backgroundColor: 'lightcoral' }}>Sürükle Beni</div> </Draggable> ); export default App; - react-dnd:
Karmaşık Sürükle ve Bırak Örneği
import React from 'react'; import { DndProvider, useDrag, useDrop } from 'react-dnd'; import { HTML5Backend } from 'react-dnd-html5-backend'; const ItemType = 'ITEM'; const DraggableItem = () => { const [{ isDragging }, drag] = useDrag({ type: ItemType, item: {}, collect: (monitor) => ({ isDragging: monitor.isDragging() }), }); return <div ref={drag} style={{ opacity: isDragging ? 0.5 : 1 }}>Sürükle Beni</div>; }; const DropZone = () => { const [{ isOver }, drop] = useDrop({ accept: ItemType, drop: () => ({ name: 'DropZone' }), collect: (monitor) => ({ isOver: monitor.isOver() }), }); return <div ref={drop} style={{ backgroundColor: isOver ? 'lightblue' : 'lightgray', height: '200px', width: '200px' }}>Bırak Beni</div>; }; const App = () => ( <DndProvider backend={HTML5Backend}> <div style={{ display: 'flex', gap: '20px' }}> <DraggableItem /> <DropZone /> </div> </DndProvider> ); export default App; - react-zoom-pan-pinch:
Yakınlaştırma ve Kaydırma Örneği
import React from 'react'; import { TransformWrapper, TransformComponent } from 'react-zoom-pan-pinch'; const App = () => ( <TransformWrapper> <TransformComponent> <img src='your-image-url.jpg' alt='Zoomable' style={{ width: '500px' }} /> </TransformComponent> </TransformWrapper> ); export default App;
