国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

開(kāi)源 UI 庫(kù)中,唯一同時(shí)實(shí)現(xiàn)了大表格虛擬化和樹(shù)表格的 Table 組件

shenhualong / 2205人閱讀

摘要:截止到目前年月日為止,開(kāi)源庫(kù)中沒(méi)有找到可以支持的組件,所以在最新的版本中支持這一特性。所謂的大表格虛擬化,其實(shí)就是為表格設(shè)置一個(gè)較大的數(shù)據(jù)比如條數(shù)據(jù),然后虛擬一個(gè)表格隱藏掉不需要顯示的數(shù)據(jù)。在組件之前的版本中,渲染的樹(shù)形表格的結(jié)構(gòu)是一棵。

背景

有這樣一個(gè)需求,一位 React Suite(以下簡(jiǎn)稱 rsuite)的用戶,他需要一個(gè) Table 組件能夠像 Jira Portfolio 一樣,支持樹(shù)形數(shù)據(jù),同時(shí)需要支持大數(shù)據(jù)渲染。 截止到目前(2019年1月18日)為止,開(kāi)源 UI 庫(kù)中沒(méi)有找到可以支持的組件,所以 rsuite 在最新的版本中支持這一特性。

接下來(lái),我們看一下 rsuite 中是怎么支持這兩個(gè)功能?

大表格虛擬化

首先,我們看一下支持大數(shù)據(jù)渲染,在頁(yè)面中渲染過(guò)多的 DOM 元素會(huì)帶來(lái)性能問(wèn)題,必須得有一種解決方案去優(yōu)化它,我們暫且叫做大表格虛擬化。

所謂的大表格虛擬化,其實(shí)就是為表格設(shè)置一個(gè)較大的數(shù)據(jù)(比如 10000 條數(shù)據(jù)),然后虛擬一個(gè)表格隱藏掉不需要顯示的數(shù)據(jù)。

為了解決讓瀏覽器渲染的大量 DOM 時(shí)候出現(xiàn)的性能問(wèn)題,我們不能把 10000 條數(shù)據(jù)都渲染到頁(yè)面,采用一種方式,只渲染可視范圍內(nèi)數(shù)據(jù)。 同時(shí)為表格設(shè)置一個(gè)滾動(dòng)條,只有在滾動(dòng)到需要顯示的區(qū)域時(shí)候才渲染該區(qū)域的數(shù)據(jù),減少的 DOM 數(shù)量。

預(yù)覽地址

以上這是一個(gè) 10000 條數(shù)據(jù)的 Table,渲染后的 HTML 結(jié)構(gòu)是:

我們可以看到在 Table 中只渲染了 14 個(gè) rs-table-row ,其中第一個(gè)和最后一個(gè)是沒(méi)有 children, 只是一個(gè)擁有高度的占位符。 每一個(gè) rs-table-row 都是絕對(duì)定位,所以即使 Table 中刪除一個(gè) Row, 或者新增一個(gè) Row ,也不會(huì)改變其他 Row 的位置。 在這樣的基礎(chǔ)上,通過(guò)獲取滾動(dòng)條的滾動(dòng)的位置,就很容易判斷當(dāng)前 Row 的 top 值是否在 Table 的可視范圍內(nèi),同時(shí)更新所有的 Row。

很多優(yōu)秀的庫(kù)都實(shí)現(xiàn)了這樣的功能,原理基本一致,比如 react-virtualized 就提供 Table 組件,但是他不支持 Tree。

樹(shù)形表格

在表格中展示樹(shù)形數(shù)據(jù)的需求,我們見(jiàn)得比較多就像甘特圖表格展示那樣。它有子父層級(jí)關(guān)系,可以展開(kāi)子節(jié)點(diǎn)。

這樣一個(gè)表格,很多 Table 組件都支持,但是如果同時(shí)需要支持虛擬化就相對(duì)比較麻煩,因?yàn)樵谡归_(kāi)關(guān)閉節(jié)點(diǎn)的時(shí)候需要重新計(jì)算顯示的 DOM 以及設(shè)置滾動(dòng)條的位置。

在 rsuite Table 組件之前的版本中,渲染的樹(shù)形表格的 DOM 結(jié)構(gòu)是一棵 Tree。 所以首先需要把 Tree 拍平,轉(zhuǎn)換一個(gè)一維數(shù)組,為每一個(gè)節(jié)點(diǎn)設(shè)置父節(jié)點(diǎn),通過(guò)父節(jié)點(diǎn)的深度渲染 Tree 節(jié)點(diǎn)的相對(duì)位置。 然后就比較好處理,只需要在點(diǎn)擊展開(kāi)關(guān)閉節(jié)點(diǎn)按鈕的時(shí)候,處理好數(shù)據(jù)的過(guò)濾。

安裝與使用

rsuite 的 Table 組件的設(shè)計(jì),對(duì)開(kāi)發(fā)還是非常方便,通過(guò)

組件定義結(jié)構(gòu),通過(guò)賦值data 屬性渲染表格數(shù)據(jù)。

安裝

npm install rsuite --save
如果你在項(xiàng)目只希望用到 Table, 不想安裝整個(gè) rsuite 庫(kù),你可以多帶帶安裝 rsuite-table

示例代碼:

import { Table } from "rsuite";

const { Column, HeaderCell, Cell } = Table;
const data = [{ id: 1, name: "foobar", email: "foobar@xxx.com" }];

ReactDOM.render(
  
編號(hào) 姓名 郵箱
); 最后

最后,對(duì)于一個(gè)成熟的 Table 組件怎么能只有這點(diǎn)功能,所以它還支持:

自定義調(diào)整列寬

鎖定列

自動(dòng)換行

排序

分頁(yè)

編輯

合并單元格

自定義單元格

自動(dòng)列寬

可展開(kāi)行

剩下唯一的問(wèn)題,就是您是否在項(xiàng)目中嘗試它。

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/101266.html

相關(guān)文章

  • 從源碼看Element UI Table組件實(shí)現(xiàn)思路

    摘要:接下來(lái)來(lái)看一下是如何編寫(xiě)一個(gè)組件的,在看源碼之前,首先還是要對(duì)他的組件的大致功能有一個(gè)了解,這樣我們?cè)诳丛创a的時(shí)候才會(huì)知道這一段大概實(shí)現(xiàn)了什么功能。最后我實(shí)現(xiàn)的功能文檔以及最終的一個(gè)樣例 在你實(shí)現(xiàn)一個(gè)組件過(guò)程中,一定要注意一下幾點(diǎn) 將代碼模塊化并且分離。如果你將大量的邏輯或者是代碼都放在鉤子函數(shù)中(比如mounted),那么寫(xiě)出來(lái)的組件代碼將非常丑陋,這樣子寫(xiě)出的代碼也往往難以維護(hù)。...

    moven_j 評(píng)論0 收藏0
  • vue封裝element-uitable組件,靈活配置表頭實(shí)現(xiàn)表格內(nèi)編輯,按鈕,鏈接等功能。

    摘要:一封裝的組件定義表格高度全屏增加前臺(tái)分頁(yè)功能。表格內(nèi)編輯后,自動(dòng)選中該行。單元格內(nèi)數(shù)據(jù)樣式單元格內(nèi)按鈕,可多個(gè)。觸發(fā)組件綁定函數(shù),參數(shù)按鈕名稱,按鈕樣式,按鈕事件標(biāo)識(shí)。單元格是否可點(diǎn)擊的判斷函數(shù),可進(jìn)行復(fù)雜的函數(shù)判斷。 vue-bxz-table 一、封裝element-ui的table組件: 定義表格高度全屏 增加前臺(tái)分頁(yè)功能。 自定義表頭,循環(huán)輸出整體表結(jié)構(gòu)。 表格內(nèi)編輯(輸入框...

    henry14 評(píng)論0 收藏0
  • jsu系列之表格組件 ---- jsu.Table

    摘要:作者注是基于擴(kuò)展的原生表格插件,設(shè)計(jì)理念來(lái)源于的組件該庫(kù)基于,暫時(shí)未找到版本因此在此造輪子。本文將記錄系列所有組件開(kāi)發(fā)過(guò)程中遇到的問(wèn)題和解決思路,歡迎討論和指正。 作者注:jsu.Table是基于jQuery擴(kuò)展的原生表格插件,設(shè)計(jì)理念來(lái)源于Element.ui的Table組件(該UI庫(kù)基于vue.js,暫時(shí)未找到j(luò)Query版本因此在此造輪子)。本文將記錄jsu系列所有組件開(kāi)發(fā)過(guò)程...

    everfly 評(píng)論0 收藏0
  • jsu系列之表格組件 ---- jsu.Table

    摘要:作者注是基于擴(kuò)展的原生表格插件,設(shè)計(jì)理念來(lái)源于的組件該庫(kù)基于,暫時(shí)未找到版本因此在此造輪子。本文將記錄系列所有組件開(kāi)發(fā)過(guò)程中遇到的問(wèn)題和解決思路,歡迎討論和指正。 作者注:jsu.Table是基于jQuery擴(kuò)展的原生表格插件,設(shè)計(jì)理念來(lái)源于Element.ui的Table組件(該UI庫(kù)基于vue.js,暫時(shí)未找到j(luò)Query版本因此在此造輪子)。本文將記錄jsu系列所有組件開(kāi)發(fā)過(guò)程...

    張巨偉 評(píng)論0 收藏0
  • jsu系列之表格組件 ---- jsu.Table

    摘要:作者注是基于擴(kuò)展的原生表格插件,設(shè)計(jì)理念來(lái)源于的組件該庫(kù)基于,暫時(shí)未找到版本因此在此造輪子。本文將記錄系列所有組件開(kāi)發(fā)過(guò)程中遇到的問(wèn)題和解決思路,歡迎討論和指正。 作者注:jsu.Table是基于jQuery擴(kuò)展的原生表格插件,設(shè)計(jì)理念來(lái)源于Element.ui的Table組件(該UI庫(kù)基于vue.js,暫時(shí)未找到j(luò)Query版本因此在此造輪子)。本文將記錄jsu系列所有組件開(kāi)發(fā)過(guò)程...

    soasme 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

閱讀需要支付1元查看
<