React.js 用の美しくポータブルなドラッグ アンド ドロップ リスト ライブラリ。 react-beautiful-dnd の機能と適用可能なユーザーの詳細については、公式ドキュメントと中国語翻訳ドキュメントを参照してください。 参考: https://www.npmjs.com/package/react-beautiful-dnd 1. インストール既存の React プロジェクトで次のコマンドを実行するのはとても簡単です。 # 糸 糸を追加 react-beautiful-dnd # ネプチューン npm をインストール react-beautiful-dnd --save 2.APi詳細については公式ドキュメントを参照してください。 3. react-beautiful-dnd デモ3.1 デモ1 垂直コンポーネントドラッグ効果は以下のとおりです。 デモ1.gif 実装コード: React をインポートします。{ コンポーネント } から "react" をインポートします。 「react-beautiful-dnd」から { DragDropContext、Droppable、Draggable } をインポートします。 // データを初期化 const getItems = count => Array.from({ length: count }, (v, k) => k).map(k => ({ id: `item-${k + 1}`, コンテンツ: `これはコンテンツ ${k + 1} です` })); // 配列の順序を再記録する const reorder = (list, startIndex, endIndex) => { const 結果 = Array.from(リスト); const [削除済み] = result.splice(startIndex, 1); result.splice(endIndex, 0, 削除済み); 結果を返します。 }; 定数グリッド = 8; // スタイルを設定する const getItemStyle = (isDragging, draggableStyle) => ({ // アイテムの見栄えを良くするための基本的なスタイル ユーザー選択: "なし", パディング: グリッド * 2、 マージン: `0 0 ${grid}px 0`, // ドラッグすると背景が変わります background: isDragging ? "lightgreen" : "#ffffff", // ドラッグ可能なものに適用する必要があるスタイル ...ドラッグ可能なスタイル }); 定数 getListStyle = () => ({ 背景: '黒'、 パディング: グリッド、 幅: 250 }); デフォルトクラスReactBeautifulDndをエクスポートし、Componentを拡張します。 コンストラクタ(props) { スーパー(小道具); この状態 = { アイテム: getItems(11) }; this.onDragEnd = this.onDragEnd.bind(this); } onDragEnd(結果) { if (!result.destination) { 戻る; } const アイテム = 並べ替え( this.state.items、 結果.ソース.インデックス、 結果.宛先.インデックス ); this.setState({ アイテム }); } 与える() { 戻る ( <DragDropContext onDragEnd={this.onDragEnd}> <中央> <ドロップ可能 droppableId="ドロップ可能"> {(提供、スナップショット) => ( <div //provided.droppableProps が適用されている同じ要素。 {...提供されたドロップ可能なプロパティ} // ドロップ可能オブジェクトが適切に動作するには、提供された可能な限り最上位の DOM ノードにバインドする必要があります。innerRef。 ref={provided.innerRef} スタイル={getListStyle(スナップショット)} > {this.state.items.map((item, index) => ( <ドラッグ可能なキー={item.id} ドラッグ可能なId={item.id} インデックス={index}> {(提供、スナップショット) => ( <div ref={provided.innerRef} {...提供されるドラッグ可能なプロパティ} {...提供されるdragHandleProps} スタイル={getItemStyle( スナップショット.isDragging、 提供された.draggableProps.style )} > {アイテムコンテンツ} </div> )} </ドラッグ可能> ))} {提供されたプレースホルダー} </div> )} </ドロップ可能> </center> </ドラッグドロップコンテキスト> ); } } 3.2 デモ2 水平ドラッグ効果は以下のとおりです。 デモ2.gif 実装コード: 実際、垂直ドラッグに似ています。Droppable は配置順序の属性として direction="horizontal" を追加します。 React をインポートします。{ コンポーネント } から "react" をインポートします。 「react-beautiful-dnd」から { DragDropContext、Droppable、Draggable } をインポートします。 定数getItems = count => ( Array.from({ length: count }, (v, k) => k).map(k => ({ id: `item-${k + 1}`, コンテンツ: `これはコンテンツ ${k + 1} です` })) ) // 配列の順序を再記録する const reorder = (list, startIndex, endIndex) => { const 結果 = Array.from(リスト); // 削除された要素を削除して記録します const [removed] = result.splice(startIndex, 1); // 元の要素を配列に追加します result.splice(endIndex, 0, removed); 結果を返します。 }; 定数グリッド = 8; // スタイルを設定する const getItemStyle = (isDragging, draggableStyle) => ({ // アイテムの見栄えを良くするための基本的なスタイル ユーザー選択: "なし", パディング: グリッド * 2、 マージン: `0 ${grid}px 0 0 `, // ドラッグすると背景が変わります background: isDragging ? "lightgreen" : "#ffffff", // ドラッグ可能なものに適用する必要があるスタイル ...ドラッグ可能なスタイル }); 定数 getListStyle = () => ({ 背景: '黒'、 表示: 'flex'、 パディング: グリッド、 オーバーフロー: 'auto'、 }); クラスReactBeautifulDndHorizontalはComponentを拡張します{ コンストラクタ(props) { スーパー(小道具); この状態 = { アイテム: getItems(10) }; this.onDragEnd = this.onDragEnd.bind(this); } onDragEnd(結果) { if (!result.destination) { 戻る; } const アイテム = 並べ替え( this.state.items、 結果.ソース.インデックス、 結果.宛先.インデックス ); this.setState({ アイテム }); } 与える() { 戻る ( <DragDropContext onDragEnd={this.onDragEnd}> <ドロップ可能 droppableId="ドロップ可能" direction="水平"> {(提供、スナップショット) => ( <div {...提供されたドロップ可能なプロパティ} ref={provided.innerRef} スタイル={getListStyle(snapshot.isDraggingOver)} > {this.state.items.map((item, index) => ( <ドラッグ可能なキー={item.id} ドラッグ可能なID={item.id} インデックス={index}> {(提供、スナップショット) => ( <div ref={provided.innerRef} {...提供されるドラッグ可能なプロパティ} {...提供されるdragHandleProps} スタイル={getItemStyle( スナップショット.isDragging、 提供された.draggableProps.style )} > {アイテムコンテンツ} </div> )} </ドラッグ可能> ))} {提供されたプレースホルダー} </div> )} </ドロップ可能> </ドラッグドロップコンテキスト> ) } } デフォルトのReactBeautifulDndHorizontalをエクスポートする 3.3 デモ3はToDo項目のドラッグ(垂直および水平ドラッグ)を実装しますデモ3.gif 実装の原則は実際には似ています。コードは整理されて github に配置されます。アドレス: github 4. 感情現時点では react-beautiful-dnd を使用しているだけですが、使い始めるのは非常に簡単で、API も複雑ではありません。パフォーマンスも良好です (demo2 では 170 を超えるタスクがレンダリングされました。ドラッグは相変わらず滑らかです)。今後、欠陥に気付いた場合は、その点をマークしておきます。 react-beautiful-dnd コンポーネントのドラッグ アンド ドロップに関するこの記事はこれで終わりです。 react-beautiful-dnd コンポーネントのドラッグ アンド ドロップに関する関連コンテンツについては、123WORDPRESS.COM で以前の記事を検索するか、以下の関連記事を引き続き参照してください。 今後とも 123WORDPRESS.COM をよろしくお願いいたします。 以下もご興味があるかもしれません:
|
<<: MySQL 5.7 に組み込まれているストレス テストの mysqlslap コマンドと構文の詳細な説明
>>: MySQL のフィールドにデフォルトの時間を追加する方法
1. はじめにSelenium を使用して Web サイトからデータをスクレイピングしたいのですが、...
1. Busyboxのソースコードをオンラインでダウンロードしてください。コンパイル方法については、...
mysql が正常に実行されている場合、テーブル構造を表示することは難しくありません。しかし、場合...
目次序文Vue Nativeの機能宣言的レンダリング双方向バインディングVue.js エコシステムの...
サブスクリプションメッセージテンプレートを選択または作成するWeChat アプレットにログインし、「...
目次1. Vue スキャフォールディングをインストールする2. プロジェクトを作成する3.1 プロジ...
目次同一起源ポリシーAjax リクエストの制限: Ajaxは自身のサーバーにのみリクエストを送信でき...
目次1. 成果を達成する2. バックエンドの実装2.1 エンティティクラス2.2 データベース内のデ...
1. 設置環境Dockerは次のCentOSバージョンをサポートしていますCentOS 6.5 (6...
a タグ疑似クラスの役割: 「:link」: 訪問されていないタグの状態。 「:visited」: ...
私の友人の多くは、127.0.0.1 と localhost の違いがわからず、問題に遭遇するかもし...
RabbitMQをインストールする前にSocatをインストールする必要があります。そうしないと、Ra...
私はプロジェクトを実行するために react を使い始めたばかりで、非常に未熟で完全な初心者です。私...
目次序文一目でわかる建築オペレーティングシステムとの対話シングルスレッドイベント駆動/イベントループ...
目次ルーティングマネージャー背景はじめる問題を解決する方法要約するルーティングマネージャー各ジャンプ...