iT邦幫忙

2024 iThome 鐵人賽

DAY 14
0
Modern Web

關於寫react 那二三事系列 第 14

Day14 PrimeReact 的tables(4)

  • 分享至 

  • xImage
  •  

今天來說說DataTable的Selection,
selection 跟 expander 對我來說是很棒的功能,
(antd 跟 mui也有所以我不強調primereact),
要說棒...就是能省掉很多寫邏輯的地方...

(畢竟十幾年的工作經驗告訴我...
很多"號稱"前端工程師的人...
是根本不講邏輯的!!!
(我都想吶喊為什麼不去當UI,來危害社會)
跟他們講邏輯,還不如自己來 T_T~ 特別趕專案時,時間特別寶貴)

沒有經驗不是問題,問題在別都憑感覺解決問題啊

憑感覺只有你在當你無法連到客戶環境時,
只能依客戶敘述去處理問題的時候

特別...遇到右腦超發達的選手,
思想跳躍到完全不知道從哪開導才能讓她們走向正途,

雖然很抓狂,
但為了不當"惡婆婆"系的前輩,
還是保持禮貌地微笑,
一步一步幫忙弄順她們纏成一團亂的邏輯,
畢竟壓下憤怒開導,比攬一個跩屁跩臭名好

好了扯遠了
那麼開始吧
因為想展示multiple的selection 因此儲存選項的state類型要是陣列

const [selectedProduct, setSelectedProduct] = useState<Product[]>([]);

放上套件

 <DataTable 
    value={tabledata} 
    selectionMode="multiple"
    selection={selectedProduct}
    onSelectionChange={(e) => setSelectedProduct(e.value)} 
    metaKeySelection={false}
    dragSelection
>
    <Column field="code" header="產品編號"></Column>
    <Column field="name" header="產品名稱"></Column>
    <Column field="category" header="產品類別"></Column>
    <Column field="quantity" header="數量"></Column>
</DataTable>

selectionMode //選擇模式
=> single:單選(點row任意區域都有用)
=> multiple:多選(點row任意區域都有用)
=> radiobutton:點radio button才有效
=> checkbox:點checkbox才有效

metaKeySelection //按住Win鍵(Cmd鍵)才可以複選

dragSelection //滑鼠按著拖曳可以多選

再來展示添加checkbox

<DataTable
  value={tabledata}
  selectionMode="checkbox"
  selection={selectedProduct1}
  onSelectionChange={(e) => setSelectedProduct1(e.value)}
  showSelectAll={false}
>
  <Column selectionMode="multiple" />
  <Column field="code" header="產品編號"></Column>
  <Column field="name" header="產品名稱"></Column>
  <Column field="category" header="產品類別"></Column>
  <Column field="quantity" header="數量"></Column>
</DataTable>

showSelectAll全選的checkbox 預設是開的,所以不想要可以關掉

除了row外還有cell的selection,用法大致跟row的相同
我就只放在後面的完整的code

好啦~今天就到這 不免俗的上完整的

import React, { useEffect, useState } from 'react';
import { DataTable, DataTableCellSelection } from 'primereact/datatable';
import { Column } from 'primereact/column';
import { ProductService } from '../service/table';
import { Product } from '../interfaces/table';
const Tables4Compnent: React.FC = () => {
  let service = new ProductService();
  const [tabledata, setTabledata] = useState<Product[]>();
  const [selectedProduct, setSelectedProduct] = useState<Product[]>([]);
  const [selectedProduct1, setSelectedProduct1] = useState<Product[]>([]);
  const [selectedCells, setSelectedCells] = useState<DataTableCellSelection<Product[]> | null>(null);

  useEffect(() => {
    service.getProductsMini().then(data => setTabledata(data));
  }, []);
  return (
    <div>
      <div className='mb-3'>
        <DataTable
          value={tabledata}
          selectionMode="multiple"
          selection={selectedProduct}
          onSelectionChange={(e) => setSelectedProduct(e.value)}
          metaKeySelection={false}
          dragSelection
        >
          <Column field="code" header="產品編號"></Column>
          <Column field="name" header="產品名稱"></Column>
          <Column field="category" header="產品類別"></Column>
          <Column field="quantity" header="數量"></Column>
        </DataTable>
      </div>
      <div className='mb-3'>
        <DataTable
          value={tabledata}
          selectionMode="checkbox"
          selection={selectedProduct1}
          onSelectionChange={(e) => setSelectedProduct1(e.value)}
          showSelectAll={false}
        >
          <Column selectionMode="multiple" />
          <Column field="code" header="產品編號"></Column>
          <Column field="name" header="產品名稱"></Column>
          <Column field="category" header="產品類別"></Column>
          <Column field="quantity" header="數量"></Column>
        </DataTable>
      </div>
      <div>
        <DataTable
          value={tabledata}
          selectionMode="multiple"
          cellSelection={true}
          selection={selectedCells!}
          onSelectionChange={(e) => setSelectedCells(e.value)!}
        >
          <Column field="code" header="產品編號"></Column>
          <Column field="name" header="產品名稱"></Column>
          <Column field="category" header="產品類別"></Column>
          <Column field="quantity" header="數量"></Column>
        </DataTable>
      </div>
    </div>
  );
}
export default Tables4Compnent;

明天見!


上一篇
Day13 PrimeReact 的tables(3)
下一篇
Day15 PrimeReact 的tables(5)
系列文
關於寫react 那二三事30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言