テーブルをどのように反応テーブルと反応テーブルとTailwindCSSを構築する
38145 ワード
この記事では、反応テーブルとTreWinWinCSSを使用してActionableデータテーブルを構築する方法を参照してください.データテーブルは、アプリケーションダッシュボードの重要なUI要素です.
フロントエンド開発に信頼性の高いデータテーブルを構築する方法を知ることは常に重要です.
技術的な部分に入る前に.どのようなデータテーブルを理解しようとして、なぜそれがユーザーの視点のように重要です.
データ表は、データのリストの明確な表現です.これは、行と列のデータを表現する方法です.
あなたがオンラインサービスで電子商取引店を運営していると考えてください.あなたは素敵な表現形式で毎月の注文を参照してくださいし、また、特定の月に最も頻繁に購入したアイテムから知りたい.
伝統的なアプローチの一つは、ExcelまたはGoogleシートのすべてのデータを管理することです.あなたはまだそれを行うことができます.しかし、データの大規模なセットになると面倒です.
データテーブルの役割がここにあります.基本的には、ソートされた順序などのすべての機能を持つテーブル内のすべてのレポートデータを管理し、オプションとページ化されたデータをフィルタリングします.
それはあなたのすべての機能を簡単な方法でデータを管理するのに役立ちます.
ここでは、テーブルに動的に行を追加し、データテーブル自体でデータを追加/編集できるスマートデータテーブルを構築します.
ここでは、データテーブルを持つクライアントアプリケーションが必要です.その後、データをGoogleシートに保存するサーバーにデータを送信します.
しかし、この記事は主に反応テーブルを使用してデータテーブルを構築することに焦点を当てています.あなたがNodeJSでGoogleシートを統合する方法を学びたいならば.チェックアウトarticle
コマンドを使って反応アプリケーションを作成しましょう.
その後インストール
まず、テーブルには主に行と列が含まれます.同じ反応テーブルに行く.したがって、列と行をレンダリングするには、反応テーブルフックのデータと列を渡す必要があります.
テーブルをレンダリングするための引数として、列と行を取る反応テーブルコンポーネントを作成しましょう.
それをよりよく理解するために、一人でそれを壊しましょう.
任意のテーブルについては、次のようなHTMLセマンティクスがあります
それはからの小道具の目的です
そのように、私たちは
その後、我々は
次のコードを追加します
これまでのところ、テーブル内の列と行のレンダリング方法を見てきました.編集可能なセルを行の中にどのようにレンダリングするかを見ましょう.
編集可能なセルをレンダリングするには、カスタム配列を列配列内に表示する必要があります.
コンポーネントの作成
value -カスタムセルへの値を返します.初期値を使用してコンポーネント内に表示します row -セルを挿入する行の値を返します. column -セルを追加した列の値を返します. updatemydate - onblurイベントの親コンポーネントを更新するための小道具です 列内のカスタムコンポーネントをマップする必要があります
最後に、データテーブルの検索機能とフィルター機能を実装する必要があります.検索コンポーネントを表のコンポーネントの外部に表示するので、簡単になります.
内部で実装する必要はありません
あなたのウェブ開発経歴でデータ表を構築する方法を知ることは、重要です.なぜなら、あなたの開発生活の中でいくつかの時点でそれを実装する必要があるかもしれません.それの概念を探求し、それによくなるために多くを練習してください.
Source Code
フロントエンド開発に信頼性の高いデータテーブルを構築する方法を知ることは常に重要です.
どのようなデータテーブルですか?
技術的な部分に入る前に.どのようなデータテーブルを理解しようとして、なぜそれがユーザーの視点のように重要です.
データ表は、データのリストの明確な表現です.これは、行と列のデータを表現する方法です.
なぜそれが重要ですか?
あなたがオンラインサービスで電子商取引店を運営していると考えてください.あなたは素敵な表現形式で毎月の注文を参照してくださいし、また、特定の月に最も頻繁に購入したアイテムから知りたい.
伝統的なアプローチの一つは、ExcelまたはGoogleシートのすべてのデータを管理することです.あなたはまだそれを行うことができます.しかし、データの大規模なセットになると面倒です.
データテーブルの役割がここにあります.基本的には、ソートされた順序などのすべての機能を持つテーブル内のすべてのレポートデータを管理し、オプションとページ化されたデータをフィルタリングします.
それはあなたのすべての機能を簡単な方法でデータを管理するのに役立ちます.
デモ
ここでは、テーブルに動的に行を追加し、データテーブル自体でデータを追加/編集できるスマートデータテーブルを構築します.
セットアップとインストール
ここでは、データテーブルを持つクライアントアプリケーションが必要です.その後、データをGoogleシートに保存するサーバーにデータを送信します.
しかし、この記事は主に反応テーブルを使用してデータテーブルを構築することに焦点を当てています.あなたがNodeJSでGoogleシートを統合する方法を学びたいならば.チェックアウトarticle
コマンドを使って反応アプリケーションを作成しましょう.
create-react-app
npx create-react-app client
さて、ルートディレクトリ内の反応アプリケーションがあります.その後インストール
react-table
これは、反応アプリケーションでテーブルを作成するための見出しのないUIです.npm i react-table
最後に、あなたの反応アプリケーションでTailWindCSSをインストールしましょう.このセットアップについてよく書かれたチュートリアルがすでにあるので、私はこれに深く行きたくありません.チェックアウトarticle 始める
まず、テーブルには主に行と列が含まれます.同じ反応テーブルに行く.したがって、列と行をレンダリングするには、反応テーブルフックのデータと列を渡す必要があります.
テーブルをレンダリングするための引数として、列と行を取る反応テーブルコンポーネントを作成しましょう.
import React from "react";
import { useTable } from "react-table";
const Table = ({ columns, data }) => {
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow,
state,
} = useTable({
columns,
data,
});
return (
//Render UI Here
);
};
export default Table;
ここでは、列とデータを小道具として受け取り、USETableと呼ばれるフックに渡します.これにより、いくつかの小道具が返されます.それをよりよく理解するために、一人でそれを壊しましょう.
任意のテーブルについては、次のようなHTMLセマンティクスがあります
table
, th
, tbody
, tr
and td
. この意味論のためにいくつかのプロパティが必要です.たとえば、Paginationまたはフィルタロジックをゼロから作成するには.HTML要素にアクセスする必要があるかもしれません.react-table
この機能をボックスから提供します.これを行うには、あなたのHTML要素にusetableフックから小道具をマップする必要があります.それはからの小道具の目的です
useTable
フック.また、カスタムのいずれかを使用してこれらのプロパティをオーバーライドできます.柱のいくつかはgetTableProps
, getTableBodyProps
など<table className="min-w-full divide-y divide-gray-200"
{...getTableProps()} />
</table>
ここでは、テーブルを持っているgetTableProps
反応テーブルから小道具それをマップします.そのように、私たちは
thead
, tbody
etc<thead>
{headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => (
<th
className="px-6 py-3 bg-gray-50 text-left text-xs leading-4 font-medium text-gray-500 uppercase tracking-wider"
{...column.getHeaderProps()}
>
{column.render("Header")}
</th>
))}
</tr>
))}
</thead>
ここで注意することは重要です.headerGroup
テーブルのヘッダになるヘッダを返します.その後、我々は
tbody
同じ種類のパターンで.<tbody className="bg-white divide-y divide-gray-200" {...getTableBodyProps()}>
{rows.map((row, i) => {
prepareRow(row)
return (
<tr {...row.getRowProps()}>
{row.cells.map(cell => {
return (
<td
className="px-6 py-4 whitespace-no-wrap text-sm leading-5 font-medium text-gray-900"
{...cell.getCellProps()}
>
{cell.render("Cell")}
</td>
)
})}
</tr>
)
})}
</tbody>
満ちるTable/index.js
ここのコンポーネント.import React from "react"
import { useTable } from "react-table"
const Table = ({ columns, data }) => {
const {
getTableProps,
getTableBodyProps,
headerGroups,
rows,
prepareRow,
state,
} = useTable({
columns,
data,
})
return (
<div className="flex flex-col w-full">
<div className="-my-2 py-2 sm:-mx-6 sm:px-6 lg:-mx-8 lg:px-8">
<div className="align-middle inline-block min-w-full shadow sm:rounded-lg border-b border-gray-200">
<table
className="min-w-full divide-y divide-gray-200"
{...getTableProps()}
>
<thead>
{headerGroups.map(headerGroup => (
<tr {...headerGroup.getHeaderGroupProps()}>
{headerGroup.headers.map(column => (
<th
className="px-6 py-3 bg-gray-50 text-left text-xs leading-4 font-medium text-gray-500 uppercase tracking-wider"
{...column.getHeaderProps()}
>
{column.render("Header")}
</th>
))}
</tr>
))}
</thead>
<tbody
className="bg-white divide-y divide-gray-200"
{...getTableBodyProps()}
>
{rows.map((row, i) => {
prepareRow(row)
return (
<tr {...row.getRowProps()}>
{row.cells.map(cell => {
return (
<td
className="px-6 py-4 whitespace-no-wrap text-sm leading-5 font-medium text-gray-900"
{...cell.getCellProps()}
>
{cell.render("Cell")}
</td>
)
})}
</tr>
)
})}
</tbody>
</table>
</div>
</div>
</div>
)
}
export default Table
インポートしましょうTable
親コンポーネント内のコンポーネントとプロップとして必要なデータを渡します.次のコードを追加します
App.js
,import React, { useState, useEffect } from "react"
import Table from "./components/Table"
function App() {
const [rowdata, setRowData] = useState([])
const onAddRowClick = () => {
setRowData(
rowdata.concat({ username: "", email: "", gender: "", phone: "" })
)
}
const columns = [
{
Header: "Name",
accessor: "username",
},
{
Header: "Email",
accessor: "email",
},
{
Header: "Gender",
accessor: "gender",
},
{
Header: "Phone",
accessor: "phone",
},
]
return (
<div className="container mx-auto">
<button
onClick={onAddRowClick}
className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded"
>
Add Row
</button>
<div className="flex justify-center mt-8">
<Table columns={columns} data={rowdata} />
</div>
</div>
)
}
export default App
ここでは、Table
コンポーネント.重要なことは注意してくださいcolumns
配列.含むHeader
and accessor
.Header
私たちが内部のテーブルをレンダリングth
覚えているなら{
column.render("Header")
}
accessor
「表」コンポーネントでレンダリングする行の名前を参照します.これまでのところ、テーブル内の列と行のレンダリング方法を見てきました.編集可能なセルを行の中にどのようにレンダリングするかを見ましょう.
編集可能なセルをレンダリングする
編集可能なセルをレンダリングするには、カスタム配列を列配列内に表示する必要があります.
コンポーネントの作成
EditableCell/index.js
次のコードを追加します.import React from "react"
const EditableCell = ({
value: initialValue,
row: { index },
column: { id },
updateMyData, // This is a custom function that we supplied to our table instance
}) => {
// We need to keep and update the state of the cell normally
const [value, setValue] = React.useState(initialValue)
const onChange = e => {
setValue(e.target.value)
}
// We'll only update the external data when the input is blurred
const onBlur = () => {
updateMyData(index, id, value)
}
// If the initialValue is changed external, sync it up with our state
React.useEffect(() => {
setValue(initialValue)
}, [initialValue])
return <input value={value} onChange={onChange} onBlur={onBlur} />
}
export default EditableCell
ここでは、いくつかの値と関数を小道具として渡します.一人でそれを壊しましょう.const columns = [
{
Header: "Name",
accessor: "username",
Cell: EditableCell,
},
{
Header: "Email",
accessor: "email",
Cell: EditableCell,
},
{
Header: "Gender",
accessor: "gender",
Cell: ({
value: initialValue,
row: { index },
column: { id },
updateMyData,
}) => {
const onItemClick = value => {
console.log("value", value)
updateMyData(index, id, value)
}
return (
<DropDown
options={[
{ label: "Male", value: "male" },
{ label: "Female", value: "female" },
]}
title={"Select Gender"}
selectedValue={initialValue}
onItemClick={onItemClick}
/>
)
},
},
{
Header: "Phone",
accessor: "phone",
Cell: EditableCell,
},
]
注意深く見ると、ドロップダウンを挿入し、カスタム入力を実装しました.検索とフィルタ
最後に、データテーブルの検索機能とフィルター機能を実装する必要があります.検索コンポーネントを表のコンポーネントの外部に表示するので、簡単になります.
内部で実装する必要はありません
Table
. 親コンポーネントの状態を直接操作し、検索またはフィルタ入力に基づいてデータをフィルター処理できます.const [rowdata, setRowData] = useState([])
const [filteredData, setFilteredData] = useState([])
// Searchbar functionality
const onSearchbarChange = e => {
const value = e.target.value
if (value === "") {
setFilteredData(rowdata)
} else {
if (filteredData.length > 0) {
const result = filteredData.filter(item => item.email === value)
setFilteredData(result)
} else {
const result = rowdata.filter(item => item.email === value)
setFilteredData(result)
}
}
}
// Filter functionality
const onItemClick = e => {
console.log("e", e)
if (e === "all") {
setFilteredData(rowdata)
} else {
const result = rowdata.filter(item => item.gender === e)
setFilteredData(result)
}
}
結論
あなたのウェブ開発経歴でデータ表を構築する方法を知ることは、重要です.なぜなら、あなたの開発生活の中でいくつかの時点でそれを実装する必要があるかもしれません.それの概念を探求し、それによくなるために多くを練習してください.
Source Code
Reference
この問題について(テーブルをどのように反応テーブルと反応テーブルとTailwindCSSを構築する), 我々は、より多くの情報をここで見つけました https://dev.to/ganeshmani/how-to-build-an-actionable-data-table-with-react-table-and-tailwindcss-3891テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol