最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

react antd checkbox實(shí)現(xiàn)全選、多選功能

 更新時(shí)間:2024年07月11日 10:28:43   作者:a堅(jiān)強(qiáng)的泡沫  
目前好像只有table組件有實(shí)現(xiàn)表格數(shù)據(jù)的全選功能,如果說對(duì)于list,card,collapse等其他組件來說,需要自己結(jié)合checkbox來手動(dòng)實(shí)現(xiàn)全選功能,這篇文章主要介紹了react antd checkbox實(shí)現(xiàn)全選、多選功能,需要的朋友可以參考下

背景

目前好像只有table組件有實(shí)現(xiàn)表格數(shù)據(jù)的全選功能,如果說對(duì)于list,card,collapse等其他組件來說,需要自己結(jié)合checkbox來手動(dòng)實(shí)現(xiàn)全選功能。

Checkbox.Group有實(shí)現(xiàn)全選功能,但是對(duì)于需要遍歷出來的數(shù)據(jù)(接口動(dòng)態(tài)返回),這種方式不太可行。

方案

考慮都使用checkbox組件來實(shí)現(xiàn),同時(shí)增加狀態(tài)管理。

1、增加一個(gè)【全選】checkbox,同時(shí)遍歷每一行數(shù)據(jù)的時(shí)候,為Panel組件的header屬性添加checkbox選擇框。

<Checkbox
  indeterminate={indeterminate}
  checked={checkAll}
  onChange={handleClickAllCheckbox}
>
  全選
</Checkbox>
const renderPanelItem = () => {
  return caseList?.map((item: CaseItem) => {
    const key = item.replay_id;
    const isChecked = selectedRowKeys?.includes(item.task_record_id); // 判斷是否勾選
    return (
      <Panel
        header={
          <>
            <Checkbox
              style={{ marginRight: 5 }}
              onChange={(e) => {
                e.stopPropagation();
                handleClickItemCheckbox(isChecked, item.task_record_id);
              }}
              checked={isChecked} // 視圖
            />
            <CloseCircleTwoTone twoToneColor="#f5222d" style={{ marginRight: 5 }} />
            <span>{item.task_case_name}</span>
          </>
        }
        key={key}
        extra={renderPanelExtra(item)}
      >
      // ...
      </Panel>
    );
  });
};

2、增加需要的狀態(tài)

  const [selectedRowKeys, setSelectedRowKeys] = useState<number[]>([]); // 勾選的每一行數(shù)據(jù)的id集合
  const [indeterminate, setIndeterminate] = useState(false); // 【全選】checkbox
  const [checkAll, setCheckAll] = useState(false); // 【全選】checkbox

3、當(dāng)點(diǎn)擊【全選】checkbox的時(shí)候

  • 全部勾選:把當(dāng)前頁的item.id和已有的selectedRowKeys一起存起來,注意id去重
  • 取消全部勾選:setSelectedRowKeys([])
  • 同時(shí)改變checkAll的狀態(tài)
  const handleClickAllCheckbox = () => {
    if (!checkAll) {
      setSelectedRowKeys(
        Array.from(new Set([...selectedRowKeys, ...(caseList?.map((item: CaseItem) => item.task_record_id) || [])])),
      );
    } else {
      setSelectedRowKeys([]);
    }
    setCheckAll(!checkAll);
    setIndeterminate(false); // 全選/全不選的indeterminate為false,部分選上才為true
  };

4、當(dāng)點(diǎn)擊【每一行數(shù)據(jù)的checkbox】的時(shí)候

  • 首選需要判斷該行數(shù)據(jù)是否已經(jīng)被勾選上:const isChecked = selectedRowKeys?.includes(item.task_record_id);
  • 如果已經(jīng)被勾選上了,說明需要取消勾選,則從selectedRowKeys去除掉該id;否則,為selectedRowKeys添加上該id。
  • 考慮分頁的時(shí)候,selectedRowKeys需要存放 上一頁已勾選的id 和 當(dāng)前頁已勾選的id
  • 然后再用 當(dāng)前頁已勾選的id列表 去判斷 checkAll 和 indeterminate【全選checkbox】的狀態(tài)值
// 獲取當(dāng)前頁已勾選的keys
const getCurrentCheckedList = (allKeys: number[], allData: CaseItem[]) => {
  const current: number[] = [];
  allKeys?.forEach((checkedId) => {
    allData?.forEach((c: CaseItem) => {
      if (c.task_record_id === checkedId) {
        current.push(checkedId);
      }
    });
  });
  return current;
};
// 點(diǎn)擊每一項(xiàng)數(shù)據(jù)前面checkbox時(shí)
const handleClickItemCheckbox = (isChecked: boolean, taskRecordId: number) => {
  let keys;
  if (isChecked) {
    keys = selectedRowKeys.filter((id) => id !== taskRecordId);
  } else {
    keys = [...selectedRowKeys, taskRecordId];
  }
  setSelectedRowKeys(keys);
  // 更新全選checkbox的狀態(tài)值
  const current = getCurrentCheckedList(keys, caseList);
  setCheckAll(current?.length === limit); // limit表示每一頁展示的數(shù)量,checkAll是否為true也只是針對(duì)當(dāng)前頁來說
  setIndeterminate(!!current.length && current.length < limit);
};

另外,在進(jìn)行翻頁請(qǐng)求數(shù)據(jù)的時(shí)候,需要對(duì)當(dāng)前頁的checkAll狀態(tài)值進(jìn)行判斷,并初始化

        // 當(dāng)翻頁時(shí),初始化【全選】選項(xiàng)
        const currentPageCheckedList = getCurrentCheckedList(selectedRowKeys, resp_list); // resp_list表示接口返回的數(shù)據(jù)
        setCheckAll(currentPageCheckedList?.length === limit);
        setIndeterminate(!!currentPageCheckedList.length && currentPageCheckedList.length < limit);

效果圖:

參考文檔:antd CheckBox實(shí)現(xiàn)全選、多選,antd checkbox全選

到此這篇關(guān)于react antd checkbox實(shí)現(xiàn)全選、多選功能的文章就介紹到這了,更多相關(guān)react antd checkbox全選 多選內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • 淺談React 屬性和狀態(tài)的一些總結(jié)

    淺談React 屬性和狀態(tài)的一些總結(jié)

    下面小編就為大家?guī)硪黄獪\談React 屬性和狀態(tài)的一些總結(jié)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2016-11-11
  • React使用React.lazy和Suspense實(shí)現(xiàn)組件懶加載

    React使用React.lazy和Suspense實(shí)現(xiàn)組件懶加載

    React 提供了 React.lazy 和 Suspense 這兩個(gè)好東西,能讓我們實(shí)現(xiàn)組件的懶加載,下面就跟隨小編一起來了解一下如何使用它們實(shí)現(xiàn)懶加載的具體步驟吧
    2025-03-03
  • React事件處理的機(jī)制及原理

    React事件處理的機(jī)制及原理

    這篇文章主要介紹了React事件處理的機(jī)制及原理,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • React封裝高階組件實(shí)現(xiàn)路由權(quán)限的控制詳解

    React封裝高階組件實(shí)現(xiàn)路由權(quán)限的控制詳解

    這篇文章主要介紹了React封裝高階組件實(shí)現(xiàn)路由權(quán)限的控制,在React中,為了實(shí)現(xiàn)安全可靠的路由權(quán)限控制,可以通過多種方式來確保只有經(jīng)過授權(quán)的用戶才能訪問特定路徑下的資源,下面來介紹封裝高階組件控制的方法,需要的朋友可以參考下
    2025-02-02
  • React 19 競(jìng)態(tài)問題解決

    React 19 競(jìng)態(tài)問題解決

    本文主要介紹了React 19 競(jìng)態(tài)問題解決,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2026-05-05
  • React?+?ECharts動(dòng)態(tài)折線圖完整實(shí)現(xiàn)代碼

    React?+?ECharts動(dòng)態(tài)折線圖完整實(shí)現(xiàn)代碼

    ECharts作為國內(nèi)最流行的可視化庫,其實(shí)內(nèi)置了非常強(qiáng)大的線條特效和動(dòng)畫能力,這篇文章主要介紹了React + ECharts動(dòng)態(tài)折線圖的相關(guān)資料,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2026-03-03
  • 阿里低代碼框架lowcode-engine設(shè)置默認(rèn)容器詳解

    阿里低代碼框架lowcode-engine設(shè)置默認(rèn)容器詳解

    這篇文章主要為大家介紹了阿里低代碼框架lowcode-engine設(shè)置默認(rèn)容器詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • 學(xué)習(xí)React中ref的兩個(gè)demo示例

    學(xué)習(xí)React中ref的兩個(gè)demo示例

    這篇文章主要介紹了學(xué)習(xí)React中ref的兩個(gè)demo示例,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-08-08
  • React實(shí)現(xiàn)下拉框的key,value的值同時(shí)傳送

    React實(shí)現(xiàn)下拉框的key,value的值同時(shí)傳送

    這篇文章主要介紹了React實(shí)現(xiàn)下拉框的key,value的值同時(shí)傳送方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • react中將html字符串渲染到頁面的實(shí)現(xiàn)方式

    react中將html字符串渲染到頁面的實(shí)現(xiàn)方式

    這篇文章主要介紹了react中將html字符串渲染到頁面的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-12-12

最新評(píng)論

汕尾市| 虹口区| 鄱阳县| 灌阳县| 宜宾市| 郯城县| 临安市| 收藏| 甘谷县| 额敏县| 景泰县| 桓仁| 九寨沟县| 辽宁省| 南郑县| 兴业县| 苏尼特右旗| 洪雅县| 吕梁市| 托里县| 濮阳县| 宣威市| 黄浦区| 华坪县| 包头市| 南雄市| 靖边县| 灵丘县| 潍坊市| 永兴县| 富蕴县| 务川| 邳州市| 双桥区| 承德县| 启东市| 双牌县| 理塘县| 台北市| 河西区| 罗城|