摘要:功能簡介的組件不支持大數(shù)據(jù)量的下拉列表渲染,下拉列表數(shù)量太多會(huì)出現(xiàn)性能問題,基于封裝實(shí)現(xiàn),替換原組件下拉列表,只渲染幾十條列表數(shù)據(jù),隨下拉列表滾動(dòng)動(dòng)態(tài)刷新可視區(qū)列表狀態(tài),實(shí)現(xiàn)大數(shù)據(jù)量列表高性能渲染。
功能簡介antd 的 Select 組件不支持大數(shù)據(jù)量的下拉列表渲染,下拉列表數(shù)量太多會(huì)出現(xiàn)性能問題, SuperSelect 基于 antd 封裝實(shí)現(xiàn),替換原組件下拉列表,只渲染幾十條列表數(shù)據(jù),隨下拉列表滾動(dòng)動(dòng)態(tài)刷新可視區(qū)列表狀態(tài),實(shí)現(xiàn)大數(shù)據(jù)量列表高性能渲染。
特性
基于 antd Select 組件,不修改組件用法
替換 antd Select 組件的下拉列表部分實(shí)現(xiàn)動(dòng)態(tài)渲染列表
初步測試 10w 條數(shù)據(jù)不卡頓
實(shí)現(xiàn)方案
使用 antd Select dropdownRender 方法自定義原組件下拉列表部分
對(duì)自定義列表項(xiàng)綁定原 Select 組件的各項(xiàng)方法和回調(diào)函數(shù)支持
同步使用 antd 組件下拉列表樣式
基本使用同 antd Select,只是使用 SuperSelect 代替 Select
import SuperSelect from "components/SuperSelect";
import { Select } from "antd";
const Option = Select.Option;
const Example = () => {
const children = [];
for (let i = 0; i < 100000; i++) {
children.push(
<Option value={i + ""} key={i}>
{i}
Option>
);
}
return (
<SuperSelect
showSearch
// mode="multiple"
// onChange={onChange}
// onSearch={onSearch}
// onSelect={onSelect}
>
{children}
SuperSelect>
);
};
問題
多選模式選擇后鼠標(biāo)點(diǎn)擊輸入框中刪除等圖標(biāo)時(shí)不能直接 hover 時(shí)獲取焦點(diǎn)直接刪除,需要點(diǎn)擊兩次
Warning: the children of `Select` should be `Select.Option` or `Select.OptGroup`, instead of `li`
重寫的下拉菜單沒有 isSelectOption(rc-select 源碼判斷下拉列表元素)屬性,控制臺(tái)會(huì)有 warning 提示下拉列表元素不符合 Select 組件要求
附上代碼大佬們有啥更好的做法或建議請(qǐng)多多指教
import React, { PureComponent, Fragment } from "react";
import { Select } from "antd";
// 頁面實(shí)際渲染的下拉菜單數(shù)量,實(shí)際為 2 * ITEM_ELEMENT_NUMBER
const ITEM_ELEMENT_NUMBER = 20;
// Select size 配置
const ITEM_HEIGHT_CFG = {
small: 24,
large: 40,
default: 32,
};
class Wrap extends PureComponent {
state = {
list: this.props.list,
allHeight: this.props.allHeight,
};
reactList = (list, allHeight) => this.setState({ list, allHeight });
render() {
const { list } = this.state;
const { notFoundContent } = this.props;
// 搜索下拉列表為空時(shí)顯示 no data
const noDataEle = (
{notFoundContent || "沒有匹配到數(shù)據(jù)"}
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/6970.html
摘要:配置涵蓋了目前的業(yè)務(wù)場景的基本需求,但是可擴(kuò)展性很低。最終決定采用的生態(tài)鏈來解決上述遇到的問題。在指定的路徑下寫入對(duì)應(yīng)的文件。 大綱 遇到的問題場景及解決方案對(duì)比 什么是babel? 解決過程 目前遺留的問題 目前實(shí)現(xiàn)功能API 參考 遇到的問題場景及解決方案對(duì)比 我們目前采用的是antd + react(umi)的框架做業(yè)務(wù)開發(fā)。在業(yè)務(wù)開發(fā)過程中會(huì)有較多頻繁出現(xiàn)并且相似度很高的場...
摘要:經(jīng)過一周左右的時(shí)間完成了基礎(chǔ)組件的編寫。配置涵蓋了目前的業(yè)務(wù)場景的基本需求,但是可擴(kuò)展性很低。最終決定采用的生態(tài)鏈來解決上述遇到的問題。在指定的路徑下寫入對(duì)應(yīng)的文件。大綱 遇到的問題場景及解決方案對(duì)比 什么是babel? 解決過程 目前遺留的問題 目前實(shí)現(xiàn)功能API 參考 遇到的問題場景及解決方案對(duì)比 我們目前采用的是antd + react(umi)的框架做業(yè)務(wù)開發(fā)。在業(yè)務(wù)開發(fā)過程中會(huì)...
摘要:很久沒上掘金發(fā)現(xiàn)草稿箱里存了好幾篇沒發(fā)的文章最近梳理下發(fā)出來往期面試官系列如何實(shí)現(xiàn)深克隆面試官系列的實(shí)現(xiàn)面試官系列前端路由的實(shí)現(xiàn)面試官系列基于數(shù)據(jù)劫持的雙向綁定優(yōu)勢所在面試官系列你為什么使用前端框架前言設(shè)計(jì)前端組件是最能考驗(yàn)開發(fā)者基本功的測 很久沒上掘金,發(fā)現(xiàn)草稿箱里存了好幾篇沒發(fā)的文章,最近梳理下發(fā)出來 往期 面試官系列(1): 如何實(shí)現(xiàn)深克隆 面試官系列(2): Event Bus...
摘要:是校驗(yàn)表單組件數(shù)據(jù)正確性的字段,其值為數(shù)組,里面的數(shù)組元素可以為。所以數(shù)組元素如果為的話,其內(nèi)容就是的。到目前為止,表單適合大部分的表單應(yīng)用場景。 JSON表單 描述 JSON表單是一個(gè)基于React的抽象組件,它可以把JSON數(shù)據(jù)格式描述的表單轉(zhuǎn)換成項(xiàng)目中的表單,它可以用簡短的幾行代碼,快速的生成Form表單。JSON表單的優(yōu)點(diǎn)是: 可以快速構(gòu)建出一個(gè)表單 表單的數(shù)據(jù)、邏輯、視圖分...
摘要:引言最近做的項(xiàng)目已經(jīng)接近尾聲剛剛發(fā)到線上回顧和總結(jié)一下這段時(shí)間遇到的問題和個(gè)人的一些想法。通過在指令中比較前后值以及設(shè)置避免不必要更新導(dǎo)致的彈窗渲染。 引言 最近做的項(xiàng)目已經(jīng)接近尾聲,剛剛發(fā)到線上,回顧和總結(jié)一下這段時(shí)間遇到的問題和個(gè)人的一些想法。 select下拉修改和復(fù)原 //部分下拉選項(xiàng) {{o...
閱讀 3461·2023-04-25 19:39
閱讀 3814·2021-11-18 13:12
閱讀 3641·2021-09-22 15:45
閱讀 2439·2021-09-22 15:32
閱讀 724·2021-09-04 16:40
閱讀 3734·2019-08-30 14:11
閱讀 1892·2019-08-30 13:46
閱讀 1569·2019-08-29 15:43