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 のフィールドにデフォルトの時間を追加する方法
Linuxでyumを入力すると、プロンプトが表示されます: -bash: /usr/bin/yum:...
1. mysql-5.7.17-winx64.zip インストール パッケージをダウンロードします ...
目次1. 最も単純な例2. 音声の速度とピッチをカスタマイズする3. 音量の調整方法4. よく使われ...
データをオペレーションにエクスポートする場合、フィールドの結合は避けられません。MySQL でこれが...
目次MySQL マスター スレーブ データベースが同期されない問題を解決する 2 つの方法1. 非同...
フロントエンドの初心者として、私は数日間フロントエンドをいじってみました。 。今日、私は自分が固く信...
SPA を構築する場合、多くの場合、特定のルートを保護する必要があります。たとえば、認証されたユーザ...
序文Linux には、ネットワーク接続、プロセス、およびその他の情報をリアルタイムで収集するための対...
張新旭氏の記事を引用して皆さんにシェアしたいと思います。 変更を加えたい場合は、対応する画像によって...
序文最近、偶然 MySQL の coalesce を発見しました。ちょうど時間があったので、MySQ...
序文スロー クエリ ログは、MySQL で非常に重要な機能です。MySQL のスロー クエリ ログ機...
ウィンドウの中央にブロック要素の位置を設定する方法ブロック要素をウィンドウの中央に配置する上記の方法...
目次基本的なデータベース操作2) データベースを表示する3) データベースを選択する4) データベー...
この記事の例では、参考までに簡単な計算機を実装するためのJavaScriptの具体的なコードを共有し...
1. フロート: 主な目的は、テキストを画像の周囲に折り返す効果を実現することです。また、複数列レイ...