ドラッグアンドドロップテーブルに反応する美しいDND(パートI)
今週、私は新しい反応成分を実験的に学習し、それを私の中に実装したかったですEffectiveDonate ウェブサイト.私はサイトのどのような側面がそのUXを改善するためにクールな新機能を使用することができるかを考え始めて、プロフィールページに集中しました.以前に、プロフィールページは、ユーザーが彼らのデフォルトテーマ(健康、教育、その他)を更新するのを許して、また、彼らが主演した非営利的なプロジェクトを見ることができました.プロジェクトのリストはSemantic UI Table , そして、ユーザーがプロジェクトについての重要な情報を表示し、プロジェクトに寄付したり、プロジェクトをその星から削除することができました.しかし、テーブルの順序でソートされたので、ユーザーの最新の主演のプロジェクトは、テーブルの下部にすべての方法だった-最高のUXではない!
簡単に修正してテーブルを並べ替えることができましたが、簡単に修正できました.それで、私はテーブルをよりダイナミックにするために反応のいくつかの解決をブレーンストーミングし始めました.これを見つけたList of Awesome React Components , ドラッグアンドドロップコンポーネントのリストを読んでください.ドラッグアンドドロップは、ユーザーが彼らの主演プロジェクトをカスタマイズできるように素敵な、きれいな方法です!最終的に選んだReact Beautiful DnD - それは、Github、良い命令ビデオと多くの例で17 K以上の星を持ちました.
元のプロファイルページでは、プロジェクトのテーブルを定期的に
反応美しいDNDは、誰もが使用することができますリストのためのドラッグアンドドロップ機能を作成することを目的と反応パッケージです.メインdesign goal 物理学-彼らはユーザーが手で周りのオブジェクトを移動しているように感じて欲しい.また、キーボードを使用してドラッグアンドドロップを含むアクセシビリティ機能があります.
また、テーブルで、特に意味のUIは、私のためにそれを使用するための契約を封じたテーブルのコンポーネントを反応再生します.
私を作るために
私があなたのプロジェクトのコンポーネントを実装するためのプロセスを徹底的に理解するために上記の2つのリソースを通過することをお勧めしますが、ここではAPIの主要コンポーネントのいくつかのハイライトをあげます.
このcomponent は、ドラッグアンドドロップを使用することができますあなたの反応ツリーのどの部分を指定する必要があります.私は、私は全体の意味のUIをラップ
The
エー
のみ必要なプロップ
エー
必要な小道具
1)
2 )
以下は私のコードのスニペットです
についてのもう一つのquirk
また、
私が使用した方法の例については
DNDテーブルの操作
全体的に、それは反応美しいプロセスで私のセマンティックUIテーブルを実装する楽しさと有益なプロセスだった.私はコンポーネントのAPIを学ぶことを楽しみました、そして、それは私にとって新しい概念で働くのが面白かったです
私は間違いなく見るvideo course 美しいDNDを反応させ、サンプルコードをオンラインでチェックする.また、私のリファレンスtable component file GitHubでDNDコンポーネントをどのように実装したかを完全に確認します.
今、テーブルコンポーネントで利用可能なUXに満足していますが、次のステップは、ユーザーがページを更新するときに、新しい順番でテーブルを再表示するようにバックエンドで持続するようにすることです.これはバックエンドで少しずつクリエイティブな操作を必要とします.
読んでいただきありがとうございます、ご質問やコメントがあれば私に知らせてください!
簡単に修正してテーブルを並べ替えることができましたが、簡単に修正できました.それで、私はテーブルをよりダイナミックにするために反応のいくつかの解決をブレーンストーミングし始めました.これを見つけたList of Awesome React Components , ドラッグアンドドロップコンポーネントのリストを読んでください.ドラッグアンドドロップは、ユーザーが彼らの主演プロジェクトをカスタマイズできるように素敵な、きれいな方法です!最終的に選んだReact Beautiful DnD - それは、Github、良い命令ビデオと多くの例で17 K以上の星を持ちました.
元のプロファイルページでは、プロジェクトのテーブルを定期的に
何が反応美しいdndですか?
反応美しいDNDは、誰もが使用することができますリストのためのドラッグアンドドロップ機能を作成することを目的と反応パッケージです.メインdesign goal 物理学-彼らはユーザーが手で周りのオブジェクトを移動しているように感じて欲しい.また、キーボードを使用してドラッグアンドドロップを含むアクセシビリティ機能があります.
また、テーブルで、特に意味のUIは、私のためにそれを使用するための契約を封じたテーブルのコンポーネントを反応再生します.
私のウェブサイトに反応美しいdndを実装すること
私を作るために
StarredProjectsList
コンポーネントDNDが可能、私はvideo course 反応した美しいdndについてexample 意味UI表コンポーネントの.また、パッケージをインストールすることを確認しました.npm install react-beautiful-dnd --save
. 私があなたのプロジェクトのコンポーネントを実装するためのプロセスを徹底的に理解するために上記の2つのリソースを通過することをお勧めしますが、ここではAPIの主要コンポーネントのいくつかのハイライトをあげます.
DragDropContext
このcomponent は、ドラッグアンドドロップを使用することができますあなたの反応ツリーのどの部分を指定する必要があります.私は、私は全体の意味のUIをラップ
Table
コンポーネント<DragDropContext />
. このコンポーネントの必要なプロップはonDragEnd
, ドラッグ操作が完了すると、リストまたはテーブルの状態がどのように変更されるかを指示する関数.私のオープニングタグDragDropContext
は以下の通りです.<DragDropContext onDragEnd={this.onDragEnd}>
. The
onDragEnd
メソッドは、starredプロジェクトのインデックスをドラッグし、starredProjects
状態.以下はメソッドの実装です. onDragEnd = result => {
const { destination, source, reason } = result;
// Not a thing to do...
if (!destination || reason === 'CANCEL') {
this.setState({
draggingRowId: null,
});
return;
}
if (
destination.droppableId === source.droppableId &&
destination.index === source.index
) {
return;
}
const starredProjects = Object.assign([], this.state.starredProjects);
const project = this.state.starredProjects[source.index];
starredProjects.splice(source.index, 1);
starredProjects.splice(destination.index, 0, project);
this.setState({
starredProjects
});
}
捨てる
エー
<Droppable/>
コンテナです</Draggable/>
アイテム.これは、</Draggable />
s. のみ必要なプロップ
<Droppable />
sは文字列です.droppableId
. 私のラップ<Table.Body/>
に<Droppable />
コンポーネントは、行をドラッグするデータのコンテナです.千鳥の
エー
<Draggable />
は、実際には上にドラッグされる反応コンポーネントです<Droppable />
それは常にaによって含まれなければならない<Droppable />
, しかし、それは他にも移動することができます<Droppable />
s. 必要な小道具
<Draggable />
sは以下の通りです:draggableId
and index
. これらの柱に関する重要な注意事項1)
draggableId
は文字列でなければなりません.私は当初私の整数を作り、私のテーブル行をドラッグすることができなかったときに困惑した.でも一度は.toString()
プロップに機能する、それはすべて良かった.2 )
index
propは連続整数でなければなりません[1,2,3,etc]
. また、それぞれでユニークでなければならない<Droppable />
. 以下は私のコードのスニペットです
<Table.Row>
イン<Droppable/>
アフターmap
それぞれのSTARTプロジェクトを{this.state.starredProjects.map((project, idx) => {
return (
<Draggable
draggableId={project.id.toString()}
index={idx}
key={project.id}
>
{(provided, snapshot) => (
<Ref innerRef={provided.innerRef}>
<Table.Row
...
子供機能
についてのもう一つのquirk
<Droppable />
and <Draggable />
コンポーネントはReact
子はAを必要とする機能でなければなりませんReactNode
. この子関数が作成されない場合、コンポーネントはエラーになります.この関数は2つの引数を含みます:provided
and snapshot
. 両方のドキュメントを読むことをお勧めします <Draggable />
and <Droppable />
これらの2つの引数が何をするか、そして、彼らがとる小道具を完全に理解するために.また、
<Draggable />
and <Droppable />
コンポーネントはHTMLElement
与える.この要素はref
コールバックまたは'Ref' 意味UIコンポーネント.このreact-beautiful-dnd guide の目的を説明する良い仕事をするref
コールバックとどのようにエラーを避けるために.私が使用した方法の例については
provided
and snapshot
子関数の引数Ref
マイテーブルのセマンティックUIコンポーネント<Droppable />
タグ<Droppable droppableId="table">
{(provided, snapshot) => (
<Ref innerRef={provided.innerRef}>
<Table.Body {...provided.droppableProps}>
...
DNDテーブルの操作
結論
全体的に、それは反応美しいプロセスで私のセマンティックUIテーブルを実装する楽しさと有益なプロセスだった.私はコンポーネントのAPIを学ぶことを楽しみました、そして、それは私にとって新しい概念で働くのが面白かったです
ref
コールバック.私は間違いなく見るvideo course 美しいDNDを反応させ、サンプルコードをオンラインでチェックする.また、私のリファレンスtable component file GitHubでDNDコンポーネントをどのように実装したかを完全に確認します.
今、テーブルコンポーネントで利用可能なUXに満足していますが、次のステップは、ユーザーがページを更新するときに、新しい順番でテーブルを再表示するようにバックエンドで持続するようにすることです.これはバックエンドで少しずつクリエイティブな操作を必要とします.
読んでいただきありがとうございます、ご質問やコメントがあれば私に知らせてください!
Reference
この問題について(ドラッグアンドドロップテーブルに反応する美しいDND(パートI)), 我々は、より多くの情報をここで見つけました https://dev.to/milandhar/drag-and-drop-table-with-react-beautiful-dnd-54adテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol