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 のフィールドにデフォルトの時間を追加する方法
序文最近は、PC、iPad、携帯電話、スマートウォッチ、スマートテレビなど、さまざまなデバイスが存在...
mysql ダーティページWAL メカニズムにより、InnoDB はステートメントを更新するときに、...
前のセクションでは、コンテンツ、サーバー、JavaScript、CSS など、Web サイトのパフォ...
単一の MYSQL サーバーが現在の Web サイトのトラフィックに対応できない場合の最適化ソリュー...
幅: 自動子要素(コンテンツ+パディング+境界線+余白を含む)は、親要素のコンテンツ領域全体を埋めま...
今日、仕事中に、一時的に追加した友人から、Web ページを使用して訪問者の QQ を取得する方法を尋...
序文システム領域の使用量が大きすぎて消去する必要がある場合、または特定のファイルを消去する必要がある...
目次1. 準備2. グローバルコンポーネント quill-editor を定義する1. テンプレート...
Founder Type Library は、Founder Type Library ビジネス チ...
要約すると: Readonly は入力 (テキスト/パスワード) とテキスト領域に対してのみ有効です...
サンバの概要Samba は、Linux および UNIX システム上で SMB プロトコルを実装する...
目次序文Websocketの使用Websocketオブジェクトの構築Websocket ステータスW...
Apple マグカップのアイコンと追加機能 HD ストレージボックス – アドオンパックセイバースノ...
コンテナは Docker のもう一つの中心的な概念です。簡単に言えば、コンテナとは、独立して実行され...
<base> タグは、ページ上のすべてのリンクのデフォルトのアドレスまたはデフォルトのタ...