欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

React實現(xiàn)多標簽在有限空間內(nèi)展示

 更新時間:2023年12月13日 08:35:16   作者:上馬有玉  
在業(yè)務中,需要在一個卡片組件中展示多個標簽,標簽組件高度相同,寬度和出現(xiàn)順序不同,要求標簽只能在有限的空間內(nèi)展示,所以本文給大家介紹了React實現(xiàn)多標簽在有限空間內(nèi)展示,需要的朋友可以參考下

場景

在業(yè)務中,需要在一個卡片組件中展示多個標簽,標簽組件高度相同,寬度和出現(xiàn)順序不同,要求標簽只能在有限的空間內(nèi)展示(比如滿足放入兩行標簽的空間),并在滿足最大展示數(shù)量的情況下,對超出部分進行隱藏,然后通過鼠標 hover 的方式展示隱藏內(nèi)容

思路

標簽的高度相同,空間內(nèi)可支持的標簽行數(shù)固定,多標簽的內(nèi)容可以轉(zhuǎn)化為一個數(shù)組數(shù)據(jù),所以可把問題概括為:獲取在給定的行數(shù)內(nèi),按順序放入的不同寬度標簽的最大數(shù)量,則余下的內(nèi)容為需要隱藏的標簽內(nèi)容

有明確的輸入輸出,可以再進一步轉(zhuǎn)化為一個算法問題:給定一個數(shù)字數(shù)組、限制的行數(shù)和行最大值,將數(shù)組中的數(shù)字依次放入行中并相加,相加的值不能超過行最大值,如果加入下一個數(shù)字后超出最大值,則該行不再計入該數(shù)字,并在下一行重新開始放入計算,如果超出行數(shù),則停止,最后統(tǒng)計可以放入給定行中的最大數(shù)字數(shù)量

const calculateLength = (rowNums: number[], rowCount: number, rowMaxValue: number) => {
    let count = 0; // 統(tǒng)計數(shù)字數(shù)量
    let currRow = 0; // 當前行數(shù)
    let currSum = 0; // 當前行的累加和

    for (let i = 0; i < rowNums.length; i++) {
        // 當前值大于最大值,停止
        if (rowNums[i] > rowMaxValue) {
            break;
        }
        // 如果加入下一個數(shù)字后超出最大值,重新開始計算
        if (currSum + rowNums[i] > rowMaxValue) {
            currRow++;
            currSum = 0;
        }
        // 如果行數(shù)超過設定的行數(shù),停止統(tǒng)計
        if (currRow >= rowCount) {
            break;
        }
        // 更新當前行的累加和
        currSum += rowNums[i];
        // 統(tǒng)計數(shù)字數(shù)量
        count++;
    }
    return count;
};

項目中的實現(xiàn)

在明確思路后的,在項目中的實現(xiàn)只需要準備好算法中的需要的參數(shù),再代入使用即可

需要獲取的內(nèi)容有:

  • 標簽寬度數(shù)組
  • 行最大值
  • 行數(shù):行數(shù)是基于設計稿限制的,可以直接使用常量定義

標簽寬度數(shù)組、行最大值獲取

標簽寬度數(shù)組的獲取似乎有點矛盾,既要隱藏超出的標簽,但又需要標簽渲染為實際的 Dom 后才可以獲取其寬度。這里直接采用比較粗暴的方式,使用絕對定位,脫離文檔流全量渲染標簽內(nèi)容并隱藏,只用于獲取標簽的寬度

<div>
	{renderTag()}
	<div ref={ref} style={{ positions: 'absolute', opacity: 0 }}> 
	    {renderAllTag()}
	</div>
</div>

基于 ref 即可獲行最大值,即標簽父級 Dom 的寬度

const containerWidth = ref.current.clientWidth

在基于該 Dom 的 children 內(nèi)容,獲取標簽的寬度數(shù)組

const tagChildren = ref.current.children;

const itemWidthList = Array.from(tagsChildren).map(item => item.clientWidth)

最后帶入上述 calculateLength 方法,計算出實際需要渲染的最大數(shù)量,并對后端返回的標簽數(shù)據(jù)進行分割處理

最后

實現(xiàn)時還有一些需要注意的點:

  • 計算中,當單個標簽的寬度大于行最大寬度的時候,需要直接返回
  • 計算出可以放入給定行中的最大數(shù)量后,還需要考慮給展示隱藏數(shù)量的 Dom 留空間,可以在計算結(jié)果的基礎上,再減 1或減 2

以上就是React實現(xiàn)多標簽在有限空間內(nèi)展示的詳細內(nèi)容,更多關于React多標簽展示的資料請關注腳本之家其它相關文章!

相關文章

  • 基于React?Hooks的小型狀態(tài)管理詳解

    基于React?Hooks的小型狀態(tài)管理詳解

    本文主要介紹一種基于?React?Hooks?的狀態(tài)共享方案,介紹其實現(xiàn),并總結(jié)一下使用感受,目的是在狀態(tài)管理方面提供多一種選擇方式。感興趣的小伙伴可以了解一下
    2021-12-12
  • React中useEffect與生命周期鉤子函數(shù)的對應關系說明

    React中useEffect與生命周期鉤子函數(shù)的對應關系說明

    這篇文章主要介紹了React中useEffect與生命周期鉤子函數(shù)的對應關系說明,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • react中Suspense的使用詳解

    react中Suspense的使用詳解

    這篇文章主要介紹了react中Suspense的使用詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-09-09
  • 關于react中組件通信的幾種方式詳解

    關于react中組件通信的幾種方式詳解

    這篇文章主要給大家介紹了關于react中組件通信的幾種方式,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧。
    2017-12-12
  • 一文詳解React中如何實現(xiàn)組件懶加載

    一文詳解React中如何實現(xiàn)組件懶加載

    懶加載是一種優(yōu)化技術,旨在延遲加載不必要的資源,直到它們真正需要時再進行加載,那么React的懶加載是如何實現(xiàn)的呢,下面小編就來和大家詳細講講吧
    2025-03-03
  • 詳解React-Router中Url參數(shù)改變頁面不刷新的解決辦法

    詳解React-Router中Url參數(shù)改變頁面不刷新的解決辦法

    這篇文章主要介紹了詳解React-Router中Url參數(shù)改變頁面不刷新的解決辦法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • React列表欄及購物車組件使用詳解

    React列表欄及購物車組件使用詳解

    這篇文章主要為大家詳細介紹了React列表欄及購物車組件使用,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • React?Hydrate原理源碼解析

    React?Hydrate原理源碼解析

    這篇文章主要為大家介紹了React?Hydrate原理源碼解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-01-01
  • React Hook useState useEffect componentDidMount componentDidUpdate componentWillUnmount問題

    React Hook useState useEffect componentD

    這篇文章主要介紹了React Hook useState useEffect componentDidMount componentDidUpdate componentWillUnmount問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • react render props模式實現(xiàn)組件復用示例

    react render props模式實現(xiàn)組件復用示例

    本文主要介紹了react render props模式實現(xiàn)組件復用示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2022-07-07

最新評論