1. Code
  2. JavaScript
  3. React

Bekerja dengan Tabel di React, Bagian Pertama

Salah satu elemen antarmuka pengguna yang paling umum untuk menampilkan data mu adalah tabel. Ternyata ada banyak aspek yang harus dikontrol saat bekerja dengan tabel, seperti:
Scroll to top
This post is part of a series called Working With Tables in React.
Working With Tables in React: Part Two

Indonesian (Bahasa Indonesia) translation by Muhammad Gufron (you can also view the original English article)

Ikhtisar

Salah satu elemen antarmuka pengguna yang paling umum untuk menampilkan data mu adalah tabel. Ternyata ada banyak aspek yang harus dikontrol saat bekerja dengan tabel, seperti:

  • menentukan kolom dan header
  • berbagai format sel (teks, angka, checkbox)
  • merubah ukuran
  • penyaringan
  • pertumbuhan dinamis
  • styling

Dalam seri-dua bagian ini, anda akan belajar tentang seluk beluk bekerja dengan data tabel dalam React menggunakan komponen React Bootstrap Tabel

Membuat Applikasi Vanilia React

Saya berasumsi Anda sudah familiar dengan React sendiri dan akan fokus bekerja dengan React Bootstrap Table. Envato Tuts + memiliki seri besar pada React yang bisa anda baca untuk dasar dasarnya.

Singkatnya, saya menggunakan react-create-app untuk membuat aplikasi vanilia React dan kemudian menginstall react-bootstrap-table: npm install react-bootstrap-table --save.

Penting untuk menambahkan bootstrap CSS ke file public/index.html.

1
<!doctype html>
2
<html lang="en">
3
  <head>
4
    <meta charset="utf-8">
5
    <meta name="viewport" 
6
          content="width=device-width, 

7
                  initial-scale=1, 

8
                  shrink-to-fit=no">
9
    <meta name="theme-color" content="#000000">
10
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json">
11
    <link rel="shortcut icon" href="%PUBLIC_URL%/favicon.ico">
12
    <!-- Latest compiled and minified bootstrap CSS -->
13
    <link rel="stylesheet" 
14
          href="https://maxcdn.bootstrapcdn.com/bootstrap/latest

15
                /css/bootstrap.min.css">
16
17
    <!-- bootstrap theme (Optional) -->
18
    <link rel="stylesheet" 
19
          href="https://maxcdn.bootstrapcdn.com/bootstrap/latest

20
               /css/bootstrap-theme.min.css">
21
    <title>React App</title>
22
  </head>
23
  <body>
24
    <noscript>
25
      You need to enable JavaScript to run this app.
26
    </noscript>
27
    <div id="root"></div>
28
  </body>
29
</html>

WebStorm

Jika anda menggunakan WebStorm JetBrains dan kamu ingin menjalankan tes, tambahkan --env=jsdom di konfigurasi mu.

Tabel Dasar

Kita akan mulai dengan tabel dasar. Berikut adalah komponen tabel dasar. Mengimpor BoostrapTable dan TableHeaderColumn dari react-bootstrap-table dan juga CSS dari direktori dist

Metode render() membuat tabel dengan tiga kolom: "ID", "Name", dan "Value". Data aktual dalam tabel berasal dari properti "data" (this.props.data). Data tersebut berisi beberapa nama karakter dari kancah acara Arrested Development.

1
import React, { Component } from 'react';
2
import {BootstrapTable, 
3
       TableHeaderColumn} from 'react-bootstrap-table';
4
import '../css/Table.css';
5
import '../../node_modules/react-bootstrap-table/css/

6
        react-bootstrap-table.css'
7
8
9
class Table1 extends Component {
10
  render() {
11
    return (
12
      <div>
13
        <BootstrapTable data={this.props.data}>
14
          <TableHeaderColumn isKey dataField='id'>
15
            ID
16
          </TableHeaderColumn>

17
          <TableHeaderColumn dataField='name'>
18
            Name
19
          </TableHeaderColumn>

20
          <TableHeaderColumn dataField='value'>
21
            Value
22
          </TableHeaderColumn>

23
        </BootstrapTable>

24
      </div>

25
    );
26
  }
27
}
28
29
export default Table1;

Aku menginisiasi BasicTable dalam metode render() dalam App.js standar dan melewati beberapa data hard-coded:

1
    import React, { Component } from 'react';
2
import './App.css';
3
import Table1 from './components/Table1'
4
5
var data = [
6
  {id: 1, name: 'Gob', value: '2'},
7
  {id: 2, name: 'Buster', value: '5'},
8
  {id: 3, name: 'George Michael', value: '4'}
9
];
10
11
12
class App extends Component {
13
  render() {
14
    return (
15
      <div className="App">
16
        <p className="Table-header">Basic Table</p>

17
        <Table1 data={data}/>

18
      </div>

19
    );
20
  }
21
}
22
23
export default App;

Untuk melihat tabel, ketikan: npm start. Konfigurasi yang dibuat oleh create-react-app mengawasi kode mu dan akan mengkompilasi ulang setiap kali kamu mengubah apa-apa, jadi kamu perlu menjalankan hanya sekali dan kemudian setiap perubahan secara otomatis akan tercermin.

1
Compiled successfully!
2
3
You can now view react-table in the browser.
4
5
  Local:            https://localhost:3000/
6
  On Your Network:  http://192.168.1.136:3000/
7
8
Note that the development build is not optimized.
9
To create a production build, use yarn build.

Inilah hasilnya:

Basic table output with three columns and rowsBasic table output with three columns and rowsBasic table output with three columns and rows

Perhatikan bahwa setiap kolom memiliki lebar yang sama.

Bekerja dengan kolom

Anda dapat mengontrol banyak aspek kolom. Secara khusus, lebar kolom dapat ditentukan dalam mutlak unit sebagai persentase atau kiri tidak ditentukan. Lebar kolom kolom tidak ditentukan adalah sisanya dibagi secara merata. Misalnya, untuk lebar tabel 100 px, satu kolom ditetapkan 15 px, kolom kedua ditentukan 25% (25 px), dan kolom ketiga ditentukan 30% (15 px).

Dua kolom lain tidak menentukan lebar. Px kolom 1, 2 dan 3 70 digunakan bersama-sama, yang meninggalkan 30 px untuk kolom 4 dan 5, yang akan membaginya sama. Kolom 4 dan 5 akan masing-masing memiliki lebar 15 px. Catatan bahwa jika tabel diubah ukurannya, angka-angka akan berubah. Hanya kolom 1 akan selalu 15 px lebar.

Kolom lainnya akan dihitung berdasarkan pada lebar tabel. Kamu juga dapat mengelola penyelarasan teks dan kolom serta style header dan kolom. Berikut adalah contoh tentang bagaimana untuk menentukan lebar kolom yang berbeda, text aligment, dan custom style:

1
import React, {Component} from 'react'
2
import {BootstrapTable, TableHeaderColumn} from 
3
       'react-bootstrap-table'
4
import '../css/Table.css'
5
import '../dist/react-bootstrap-table-all.min.css'
6
7
8
class Table2 extends Component {
9
  render() {
10
    return (
11
      <div>
12
        <BootstrapTable data={this.props.data}>
13
          <TableHeaderColumn isKey
14
                             dataField='id'
15
                             dataAlign='center'
16
                             headerAlign="left"
17
                             width="30"
18
                             tdStyle={
19
                                 {backgroundColor: 'green'}}>
20
            ID
21
          </TableHeaderColumn>

22
          <TableHeaderColumn dataField='name'
23
                             dataAlign='center'
24
                             headerAlign="center"
25
                             width="20%"
26
                             thStyle={
27
                                 {fontWeight: 'lighter', 
28
                                 color: 'red'}}>
29
            Name
30
          </TableHeaderColumn>

31
          <TableHeaderColumn dataField='value'
32
                             dataAlign='center'
33
                             headerAlign="right">
34
            Value
35
          </TableHeaderColumn>

36
        </BootstrapTable>

37
      </div>

38
    )
39
  }
40
}
41
42
export default Table2
Working with ColumnsWorking with ColumnsWorking with Columns

Styling Tabelmu

Anda melihat bagaimana style kolom individu dan header, tapi gaya dapat pergi lebih jauh. React-bootstrap-tabel menyediakan banyak opsi untuk kustomisasi. Pertama Anda dapat hanya menambahkan striped dan hover atribut ke komponen BootstrapTable untuk mendapatkan warna latar belakang alternatif pada setiap baris:<BootstrapTable data={this.props.data} striped hover>

Untuk styling semua baris, gunakan trClassName:<BootstrapTable data={data} trclassname='tr-style'>

Jika Anda ingin mendapatkan benar-benar mewah, trStyle dapat berfungsi. Memeriksa komponen tabel berikut bahwa style yang berbeda di baris nama adalah "George Michael":

1
import React, {Component} from 'react'
2
import {BootstrapTable, TableHeaderColumn} 
3
        from 'react-bootstrap-table'
4
import '../css/Table.css'
5
import '../dist/react-bootstrap-table-all.min.css'
6
7
8
function rowClassNameFormat(row, rowIdx) {
9
  // row is whole row object

10
  // rowIdx is index of row

11
  console.log(row)
12
  return row['name'] === 'George Michael' ? 
13
    'GeorgeMichael-Row' : 'Other-Row';
14
}
15
16
17
class Table3 extends Component {
18
  render() {
19
    return (
20
      <div>
21
        <BootstrapTable data={this.props.data} 
22
                        trClassName={rowClassNameFormat}
23
        >
24
          <TableHeaderColumn isKey dataField='id'
25
          >
26
            ID
27
          </TableHeaderColumn>

28
          <TableHeaderColumn dataField='name'
29
          >
30
            Name
31
          </TableHeaderColumn>

32
          <TableHeaderColumn dataField='value'
33
          >
34
            Value
35
          </TableHeaderColumn>

36
        </BootstrapTable>

37
      </div>

38
    )
39
  }
40
}
41
42
export default Table3

GeorgeMichael-Row dan Other-Row CSS kelas didefinisikan dalam Table.css:

1
.Table-header {
2
    background-color: #ccc;
3
    color: blue;
4
    padding: 10px;
5
    text-align: left;
6
}
7
8
9
.GeorgeMichael-Row {
10
    background-color: plum;
11
}
12
13
.Other-Row {
14
    background-color: greenyellow;
15
}
Styling the tableStyling the tableStyling the table

Memilih Baris

Setelah Anda memiliki data dalam tabel, Anda mungkin ingin memilih beberapa baris untuk melakukan beberapa operasi mereka. React-bootstrap-tabel menyediakan berbagai macam pilihan pilihan. Semua pilihan yang disusun dalam satu objek yang kamu berikan ke komponen sebagai atribut selectRow. Berikut adalah beberapa pilihan pilihan:

  • mode seleksi tunggal (radio button)
  • modus pilihan ganda (checkbox)
  • lebar seleksi kolom yang dapat dikonfigurasi
  • Pilih pada baris klik: secara default, Anda harus klik selectornya (radio button atau checkbox)
  • Sembunyikan kolom pilihan (berguna jika pilih pada klik baris benar)
  • mengubah warna background pada selection
  • awal baris yang dipilih
  • pilihan hooks (pada baris tunggal atau ketika semua baris yang dipilih).

Komponen-komponen berikut menunjukkan beberapa pilihan tersebut:

1
import React, {Component} from 'react'
2
import {BootstrapTable, TableHeaderColumn} 
3
        from 'react-bootstrap-table'
4
import '../css/Table.css'
5
import '../dist/react-bootstrap-table-all.min.css'
6
7
8
function onSelectRow(row, isSelected, e) {
9
  if (isSelected) {
10
    alert(`You just selected '${row['name']}'`)
11
  }
12
}
13
14
const selectRowProp = {
15
  mode: 'checkbox',
16
  clickToSelect: true,
17
  unselectable: [2],
18
  selected: [1],
19
  onSelect: onSelectRow,
20
  bgColor: 'gold'
21
};
22
23
class Table4 extends Component {
24
  render() {
25
    return (
26
      <div>
27
        <BootstrapTable data={this.props.data} 
28
                        selectRow={selectRowProp}
29
        >
30
          <TableHeaderColumn isKey dataField='id'
31
          >
32
            ID
33
          </TableHeaderColumn>

34
          <TableHeaderColumn dataField='name'
35
          >
36
            Name
37
          </TableHeaderColumn>

38
          <TableHeaderColumn dataField='value'
39
          >
40
            Value
41
          </TableHeaderColumn>

42
        </BootstrapTable>

43
      </div>

44
    )
45
  }
46
}
47
48
export default Table4
Selecting RowsSelecting RowsSelecting Rows

Kesimpulan

Dalam bagian ini, kami membuat sebuah aplikasi React sederhana yang menggunakan react-create-app, ditambahkan React-Bootstrap-Table, penduduknya tabel dengan data, bekerja dengan kolom, gaya tabel, dan dipilih baris.

Dalam bagian selanjutnya, kita akan melanjutkan perjalanan oleh memperluas baris, menambahkan baris, menghapus baris, dan meliputi pagination, sel kustomisasi pengeditan, dan maju. Nantikan.