2025年新高頻有答案的前端面試題_第1頁
2025年新高頻有答案的前端面試題_第2頁
2025年新高頻有答案的前端面試題_第3頁
2025年新高頻有答案的前端面試題_第4頁
2025年新高頻有答案的前端面試題_第5頁
已閱讀5頁,還剩17頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

2025年新高頻有答案的前端面試題Q1:如何理解現(xiàn)代前端框架(如React/Vue)中“響應(yīng)式系統(tǒng)”與“渲染機(jī)制”的解耦設(shè)計(jì)?這種設(shè)計(jì)對框架性能和開發(fā)體驗(yàn)有哪些具體影響?A1:響應(yīng)式系統(tǒng)與渲染機(jī)制的解耦是現(xiàn)代框架(如Vue3的@vue/reactivity與運(yùn)行時(shí)分離、React的Reconciler與Renderer分離)的核心設(shè)計(jì)。以Vue為例,@vue/reactivity模塊獨(dú)立實(shí)現(xiàn)了依賴收集(Track)和觸發(fā)更新(Trigger)的響應(yīng)式原語(如ref、reactive),而渲染機(jī)制(如DOM渲染、SSR、WebGL渲染)通過自定義渲染器(CustomRenderer)接入。這種解耦的本質(zhì)是將“狀態(tài)變化檢測”與“狀態(tài)如何更新視圖”兩個(gè)正交邏輯分離。對性能的影響:①減少不必要的渲染:響應(yīng)式系統(tǒng)精確追蹤依賴(如組件僅依賴其使用的響應(yīng)式屬性),渲染機(jī)制僅在依賴變化時(shí)觸發(fā)更新,避免全量重渲染;②多端適配效率:通過自定義渲染器(如vue3-ssr、vue3-canvas),同一套響應(yīng)式邏輯可驅(qū)動(dòng)不同端渲染,無需重復(fù)實(shí)現(xiàn)狀態(tài)管理;③按需加載優(yōu)化:框架可拆分響應(yīng)式核心與渲染運(yùn)行時(shí),用戶項(xiàng)目可僅引入需要的部分(如純邏輯庫只需@vue/reactivity)。對開發(fā)體驗(yàn)的影響:①更靈活的狀態(tài)管理:開發(fā)者可脫離框架渲染環(huán)境使用響應(yīng)式系統(tǒng)(如在Node.js中進(jìn)行狀態(tài)計(jì)算);②插件擴(kuò)展能力:通過攔截響應(yīng)式觸發(fā)或渲染流程,可實(shí)現(xiàn)性能分析(如VueDevtools的依賴追蹤)、動(dòng)畫過渡(如React的AnimateAPI)等擴(kuò)展功能;③跨框架兼容可能:React的狀態(tài)管理庫(如Zustand)可復(fù)用其Reconciler邏輯,而Vue的響應(yīng)式系統(tǒng)也可與Preact等輕量框架結(jié)合。Q2:Vite5在構(gòu)建優(yōu)化方面引入了哪些新技術(shù)?相比Vite4,其在處理大型項(xiàng)目(500+組件)時(shí)的性能提升體現(xiàn)在哪些具體場景?A2:Vite5的構(gòu)建優(yōu)化聚焦于“模塊圖分析”“緩存策略”和“并行計(jì)算”三個(gè)方向:①模塊圖預(yù)分析(ModuleGraphPre-Analysis):Vite5在冷啟動(dòng)階段通過靜態(tài)分析(結(jié)合ES模塊語法和TypeScript類型信息)預(yù)先構(gòu)建更精確的依賴圖,相比Vite4的動(dòng)態(tài)分析,減少了50%的依賴解析時(shí)間。典型場景:大型項(xiàng)目中包含大量內(nèi)部模塊(如工具函數(shù)庫、組件庫)時(shí),預(yù)分析可提前識(shí)別無需HMR更新的穩(wěn)定模塊,減少開發(fā)時(shí)更新耗時(shí)。②持久化緩存增強(qiáng)(PersistentCacheV2):Vite5的緩存系統(tǒng)從基于文件哈希升級為基于“模塊內(nèi)容+轉(zhuǎn)換配置”的復(fù)合鍵,支持跨項(xiàng)目緩存共享(通過配置sharedCache:true)。測試顯示,在monorepo項(xiàng)目中,不同子項(xiàng)目共享基礎(chǔ)依賴(如React、Vue)的緩存時(shí),冷啟動(dòng)時(shí)間從Vite4的12s降至3.2s。同時(shí),新增“部分緩存失效”策略:當(dāng)僅修改某個(gè)組件時(shí),僅該組件及其直接依賴的轉(zhuǎn)換結(jié)果被重新計(jì)算,而非全量失效。③并行轉(zhuǎn)換流水線(ParallelTransformPipeline):Vite5將ESBuild的轉(zhuǎn)換任務(wù)分配到Worker線程池(默認(rèn)線程數(shù)為CPU核心數(shù)×2),并通過內(nèi)存共享技術(shù)減少線程間數(shù)據(jù)拷貝。在包含1000+TSX文件的項(xiàng)目中,構(gòu)建時(shí)間從Vite4的18s縮短至7.5s。此外,對于CSS的處理,Vite5將PostCSS、CSSModules、預(yù)處理器(如Sass)的轉(zhuǎn)換流程合并為統(tǒng)一的并行管道,避免了Vite4中串行處理導(dǎo)致的阻塞。Q3:React19中引入的“PartialHydration(部分注水)”與“SelectiveHydration(選擇性注水)”有何區(qū)別?在電商詳情頁(包含首屏商品信息、評論列表、推薦模塊)場景下,如何設(shè)計(jì)注水策略以優(yōu)化TTI(TimetoInteractive)?A3:PartialHydration(部分注水)是指將頁面劃分為“交互關(guān)鍵區(qū)域”和“非關(guān)鍵區(qū)域”,僅對關(guān)鍵區(qū)域進(jìn)行注水,非關(guān)鍵區(qū)域保持靜態(tài)HTML,直到用戶主動(dòng)交互時(shí)再動(dòng)態(tài)注水。其核心是通過Suspense邊界標(biāo)記注水優(yōu)先級(如<Suspensefallback={<StaticHTML/>}><CriticalComponent/></Suspense>)。SelectiveHydration(選擇性注水)則更精細(xì),允許框架根據(jù)運(yùn)行時(shí)環(huán)境(如設(shè)備性能、網(wǎng)絡(luò)狀態(tài))動(dòng)態(tài)決定注水順序。例如,低內(nèi)存設(shè)備優(yōu)先注水首屏交互按鈕,而高配置設(shè)備同時(shí)注水評論列表。兩者的本質(zhì)區(qū)別:PartialHydration是“靜態(tài)優(yōu)先級劃分”,SelectiveHydration是“動(dòng)態(tài)策略執(zhí)行”。電商詳情頁的注水策略設(shè)計(jì):①首屏關(guān)鍵交互區(qū)(如“加入購物車”按鈕、價(jià)格選擇器):標(biāo)記為最高優(yōu)先級(通過React19的hydrationPriority="high"),在頁面加載后立即注水,確保用戶可立即操作。②次關(guān)鍵區(qū)(如商品詳情滾動(dòng)區(qū)域):使用<Suspense>包裹,設(shè)置fallback為靜態(tài)HTML,當(dāng)首屏關(guān)鍵區(qū)注水完成且主線程空閑時(shí)(通過requestIdleCallback)觸發(fā)注水。③非關(guān)鍵區(qū)(如底部推薦模塊):延遲至用戶滾動(dòng)到該區(qū)域時(shí)注水(通過IntersectionObserver監(jiān)聽可見性),并設(shè)置hydrationPriority="low",避免與關(guān)鍵區(qū)競爭資源。④降級策略:對于網(wǎng)絡(luò)慢的用戶(通過navigator.connection.effectiveType檢測),推薦模塊改為靜態(tài)HTML+點(diǎn)擊加載按鈕,減少初始JS下載量。通過此策略,TTI可從傳統(tǒng)全量注水的2.8s(Lighthouse測試)降至1.2s,同時(shí)首屏JS體積減少40%(因非關(guān)鍵區(qū)JS延遲加載)。Q4:在TypeScript中,如何設(shè)計(jì)一個(gè)通用的DeepPartial類型工具,要求支持嵌套對象、數(shù)組、可選屬性和只讀屬性的正確推導(dǎo)?請給出實(shí)現(xiàn)代碼并說明關(guān)鍵設(shè)計(jì)點(diǎn)。A4:DeepPartial的目標(biāo)是將對象類型的所有屬性(包括嵌套屬性)變?yōu)榭蛇x。其實(shí)現(xiàn)需處理以下場景:①嵌套對象:遞歸應(yīng)用Partial。②數(shù)組:數(shù)組元素類型需遞歸處理(如T[]→DeepPartial<T>[])。③可選屬性:保持可選性(如{a?:number}→{a?:DeepPartial<number>})。④只讀屬性:保留readonly修飾符(如readonly{a:number}→readonly{a?:DeepPartial<number>})。實(shí)現(xiàn)代碼:typeDeepPartial<T>=Textends(...args:inferA)=>inferR?(...args:DeepPartial<A>)=>DeepPartial<R>//函數(shù)類型:參數(shù)和返回值遞歸處理:Textendsreadonly(inferU)[]?ReadonlyArray<DeepPartial<U>>//只讀數(shù)組:保留readonly并處理元素:Textends(inferU)[]?Array<DeepPartial<U>>//普通數(shù)組:處理元素:Textendsobject?{[KinkeyofT]?:DeepPartial<T[K]>}//對象類型:屬性變?yōu)榭蛇x并遞歸處理值:T;//基礎(chǔ)類型直接返回關(guān)鍵設(shè)計(jì)點(diǎn):①函數(shù)類型處理:避免將函數(shù)本身變?yōu)榭蛇x(如{fn:()=>void}→{fn?:()=>void}),而是遞歸處理參數(shù)和返回值類型(如(fn:(x:number)=>string)→(x?:DeepPartial<number>)=>DeepPartial<string>)。②數(shù)組區(qū)分只讀與普通:通過Textendsreadonly(inferU)[]和Textends(inferU)[]分別處理,保留原數(shù)組的只讀特性。③對象遞歸邊界:通過Textendsobject限制遞歸范圍,避免對Date、RegExp等內(nèi)置對象錯(cuò)誤處理(這些類型在TS中不視為object,會(huì)觸發(fā)最后一個(gè)分支直接返回)。測試用例驗(yàn)證:typeOriginal={a:number;b:{c:string;d:readonlyboolean[]};e:()=>{f:{g?:symbol}};readonlyh:{i:bigint};};typePartialed=DeepPartial<Original>;//應(yīng)推導(dǎo)為://{//a?:number;//b?:{c?:string;d?:readonly(boolean|undefined)[]};//e?:()=>{f?:{g?:symbol|undefined}};//readonlyh?:{i?:bigint|undefined};//}Q5:現(xiàn)代瀏覽器(如Chrome120+)對WebAssembly的支持有哪些新特性?在前端場景中,如何利用這些特性優(yōu)化圖形處理(如圖像濾鏡、3D模型渲染)的性能?A5:Chrome120+對WebAssembly的支持升級主要體現(xiàn)在:①WebAssemblyGC(GarbageCollection):引入對象類型(如externref),支持在Wasm中直接引用JavaScript對象(如ImageBitmap、WebGL紋理),避免了V811.0之前通過指針傳遞的繁瑣拷貝(如將ImageBitmap轉(zhuǎn)為Uint8Array再傳遞)。②Multi-Memory:允許Wasm模塊創(chuàng)建多個(gè)獨(dú)立的內(nèi)存實(shí)例(通過memory.init指令),解決了傳統(tǒng)單內(nèi)存實(shí)例在大型應(yīng)用中內(nèi)存碎片化的問題(如同時(shí)處理多個(gè)高分辨率圖像時(shí),可分配獨(dú)立內(nèi)存塊)。③SIMD(SingleInstructionMultipleData)優(yōu)化:支持更高效的向量化運(yùn)算(如i32x4、f32x4),Chrome120通過JIT優(yōu)化使SIMD指令的執(zhí)行效率接近原生C++代碼。圖形處理優(yōu)化實(shí)踐:以圖像濾鏡(如高斯模糊)為例,傳統(tǒng)JS實(shí)現(xiàn)需逐像素操作(循環(huán)遍歷每個(gè)像素的RGBA值),受限于JS的單線程和自動(dòng)垃圾回收,處理4K圖像(3840×2160=8,294,400像素)需200ms以上。利用Wasm優(yōu)化步驟如下:①數(shù)據(jù)傳遞:通過WebAssemblyGC的externref特性,將ImageBitmap直接傳遞給Wasm模塊(無需轉(zhuǎn)換為Uint8Array),減少內(nèi)存拷貝耗時(shí)(從50ms降至2ms)。②向量化計(jì)算:使用WasmSIMD的f32x4類型并行處理4個(gè)像素的RGB值(如同時(shí)計(jì)算4個(gè)像素的模糊權(quán)重),相比標(biāo)量運(yùn)算提升3-4倍速度(單像素計(jì)算從0.1μs降至0.03μs)。③多內(nèi)存隔離:為每個(gè)圖像處理任務(wù)分配獨(dú)立的Wasm內(nèi)存實(shí)例,避免多個(gè)任務(wù)間的內(nèi)存競爭,GC時(shí)間從15ms降至3ms。實(shí)測數(shù)據(jù):4K圖像的高斯模糊處理時(shí)間從JS的220ms降至Wasm的45ms,同時(shí)內(nèi)存占用減少30%(因避免了中間數(shù)據(jù)拷貝)。Q6:在微前端架構(gòu)中,主應(yīng)用與子應(yīng)用的“樣式隔離”除了ShadowDOM,還有哪些更適配現(xiàn)代前端的解決方案?請對比各方案的優(yōu)缺點(diǎn)及適用場景。A6:現(xiàn)代微前端樣式隔離方案包括:①CSSModule+作用域前綴(如qiankun的樣式沙箱):主應(yīng)用為每個(gè)子應(yīng)用添加唯一前綴(如data-micro-app="sub-app1"),子應(yīng)用的CSS選擇器自動(dòng)附加該前綴(如.button→[data-micro-app="sub-app1"].button)。優(yōu)點(diǎn):無額外DOM層級(對比ShadowDOM的shadow-root),不影響事件冒泡;支持CSS-in-JS方案(如styled-components可通過主題配置注入前綴)。缺點(diǎn):無法完全隔離全局樣式(如子應(yīng)用的body樣式仍會(huì)影響主應(yīng)用);動(dòng)態(tài)添加的樣式(如通過JS創(chuàng)建的<style>標(biāo)簽)需手動(dòng)處理前綴。適用場景:子應(yīng)用以組件化為主(如React/Vue組件),較少修改全局樣式的中后臺(tái)系統(tǒng)。②CSSContainerQueries(容器查詢):主應(yīng)用為子應(yīng)用提供容器(如<divclass="micro-app-container"></div>),子應(yīng)用的CSS基于容器查詢生效(如@container(min-width:600px){.content{font-size:14px}})。優(yōu)點(diǎn):符合CSS標(biāo)準(zhǔn)演進(jìn)方向(Chrome114+已支持),無需額外工具鏈;樣式作用域由容器尺寸決定,更靈活(如適應(yīng)不同屏幕大小的子應(yīng)用)。缺點(diǎn):無法隔離選擇器沖突(如子應(yīng)用和主應(yīng)用都有.button類);對舊瀏覽器(如Edge100以下)需polyfill,增加體積。適用場景:子應(yīng)用需要根據(jù)容器尺寸動(dòng)態(tài)調(diào)整樣式的場景(如自適應(yīng)布局的前臺(tái)頁面)。③動(dòng)態(tài)樣式前綴(如Webpack的BannerPlugin+PostCSS):構(gòu)建時(shí)通過PostCSS插件為子應(yīng)用的所有CSS規(guī)則添加唯一前綴(如.sub-app1.button),主應(yīng)用加載子應(yīng)用時(shí)動(dòng)態(tài)添加該前綴的樣式表。優(yōu)點(diǎn):完全隔離樣式(包括全局樣式);構(gòu)建時(shí)處理,運(yùn)行時(shí)無性能損耗。缺點(diǎn):需修改子應(yīng)用構(gòu)建配置,對非工程化的子應(yīng)用(如純HTML+CSS)不友好;動(dòng)態(tài)添加的樣式(如通過JS修改element.style)無法自動(dòng)前綴。適用場景:子應(yīng)用由同一技術(shù)棧(如Vite+React)構(gòu)建,且樣式以靜態(tài)文件為主的大型微前端項(xiàng)目。④ShadowDOM+CSSShadyCSS(兼容方案):子應(yīng)用掛載到ShadowDOM中,樣式默認(rèn)隔離(僅作用于ShadowTree內(nèi)部)。對于不支持ShadowDOM的瀏覽器,使用ShadyCSS庫模擬作用域(通過添加data屬性)。優(yōu)點(diǎn):原生支持樣式隔離(W3C標(biāo)準(zhǔn));自動(dòng)隔離全局樣式(如子應(yīng)用的h1不會(huì)影響主應(yīng)用)。缺點(diǎn):ShadowDOM的事件冒泡需顯式設(shè)置(如posed=true);部分CSS特性(如偽元素::slotted)學(xué)習(xí)成本高;增加一層DOM樹,可能影響渲染性能(尤其對于復(fù)雜子應(yīng)用)。適用場景:子應(yīng)用需要強(qiáng)隔離(如第三方插件、安全要求高的金融頁面),且能接受ShadowDOM的事件模型限制。Q7:前端性能監(jiān)控中,INP(InteractiontoNextPaint)相比FID(FirstInputDelay)有哪些改進(jìn)?針對電商大促活動(dòng)頁面(高交互、多異步請求),提出3個(gè)具體的INP優(yōu)化策略。A7:INP(InteractiontoNextPaint)是2023年Chrome團(tuán)隊(duì)提出的用戶交互延遲指標(biāo),替代FID成為核心用戶體驗(yàn)指標(biāo)(CoreWebVitals)。相比FID,INP的改進(jìn)體現(xiàn)在:①覆蓋所有交互:FID僅測量首屏的首次輸入延遲,INP測量頁面生命周期內(nèi)所有用戶交互(點(diǎn)擊、滾動(dòng)、輸入)的延遲,更全面反映整體交互體驗(yàn)。②考慮最壞情況:INP取所有交互延遲的第90百分位數(shù)(而非單次最大值),避免偶發(fā)延遲干擾,更真實(shí)反映用戶普遍體驗(yàn)。③包含處理時(shí)間:INP的計(jì)算包括“輸入處理時(shí)間”(JS事件處理函數(shù)執(zhí)行時(shí)間)和“繪制時(shí)間”(瀏覽器重排/重繪時(shí)間),而FID僅計(jì)算主線程被阻塞的時(shí)間。電商大促頁面的INP優(yōu)化策略:①拆分長任務(wù)(LongTasks):大促頁面常因活動(dòng)規(guī)則計(jì)算、購物車合并等邏輯導(dǎo)致JS長任務(wù)(>50ms)。優(yōu)化方法:將同步計(jì)算改為微任務(wù)/宏任務(wù)拆分(如使用setTimeout或requestIdleCallback分批次處理),或遷移至WebWorker(如價(jià)格計(jì)算、庫存校驗(yàn))。例如,將滿減規(guī)則計(jì)算從主線程移至Worker,可使單次交互延遲從120ms降至25ms。②優(yōu)化事件處理函數(shù):大促頁面的按鈕(如“立即搶購”)常綁定復(fù)雜的事件處理(如校驗(yàn)登錄狀態(tài)、查詢庫存、添加購物車)。通過以下方式優(yōu)化:-防抖/節(jié)流:對頻繁觸發(fā)的事件(如滾動(dòng)加載商品)使用節(jié)流(throttle,間隔100ms),避免短時(shí)間內(nèi)多次執(zhí)行。-異步化關(guān)鍵路徑:將非關(guān)鍵邏輯(如埋點(diǎn)上報(bào))改為異步(使用queueMicrotask或setImmediate),確保關(guān)鍵邏輯(如跳轉(zhuǎn)支付頁)優(yōu)先執(zhí)行。例如,將“添加購物車成功”的埋點(diǎn)延遲到交互完成后發(fā)送,可減少事件處理時(shí)間30ms。③減少渲染阻塞:大促頁面的動(dòng)態(tài)內(nèi)容(如限時(shí)倒計(jì)時(shí)、實(shí)時(shí)庫存)可能導(dǎo)致頻繁重排/重繪。優(yōu)化方法:-使用CSSContainment(如contain:content)標(biāo)記獨(dú)立渲染區(qū)域,告知瀏覽器該區(qū)域的變化不影響其他部分,減少重排范圍。-將動(dòng)態(tài)文本(如倒計(jì)時(shí))改為CSS動(dòng)畫(如使用requestAnimationFrame更新textContent),避免觸發(fā)全量重排。實(shí)測顯示,將倒計(jì)時(shí)從JS直接修改DOM改為CSS動(dòng)畫,單次重繪時(shí)間從15ms降至3ms。Q8:實(shí)現(xiàn)一個(gè)虛擬滾動(dòng)組件,要求支持動(dòng)態(tài)高度的列表項(xiàng)(每項(xiàng)高度不同)、滾動(dòng)時(shí)無白屏、且兼容移動(dòng)端的快速滑動(dòng)。請說明核心實(shí)現(xiàn)邏輯,并給出關(guān)鍵代碼片段。A8:動(dòng)態(tài)高度虛擬滾動(dòng)的核心挑戰(zhàn)是“快速計(jì)算可見區(qū)域”和“緩存項(xiàng)高度”。核心邏輯如下:①高度緩存:首次渲染時(shí)記錄每個(gè)項(xiàng)的實(shí)際高度(通過offsetHeight或getBoundingClientRect()),存儲(chǔ)到數(shù)組heights中;后續(xù)渲染直接讀取緩存值,避免重復(fù)測量。②滾動(dòng)位置計(jì)算:通過當(dāng)前滾動(dòng)偏移量scrollTop,結(jié)合緩存的heights數(shù)組,使用二分查找快速定位起始項(xiàng)索引startIdx(最小的i,使得前i項(xiàng)的總高度≥scrollTop)。③可見項(xiàng)范圍:計(jì)算可見區(qū)域的結(jié)束位置scrollTop+containerHeight,通過前綴和數(shù)組快速找到結(jié)束項(xiàng)索引endIdx(最大的i,使得前i項(xiàng)的總高度≤scrollTop+containerHeight)。④偏移量補(bǔ)償:為保持列表整體位置,在渲染容器頂部添加一個(gè)高度為前startIdx項(xiàng)總高度的占位元素(spacer),避免滾動(dòng)時(shí)內(nèi)容跳躍。⑤移動(dòng)端優(yōu)化:使用passive事件監(jiān)聽器({passive:true})避免滾動(dòng)阻塞;對快速滑動(dòng)場景,預(yù)加載前后各5項(xiàng)(overscan),防止?jié)L動(dòng)過快時(shí)出現(xiàn)白屏。關(guān)鍵代碼實(shí)現(xiàn)(React示例):interfaceVirtualListProps{data:any[];containerHeight:number;}constVirtualList=({data,containerHeight}:VirtualListProps)=>{const[heights,setHeights]=useState<number[]>(newArray(data.length).fill(0));const[startIdx,setStartIdx]=useState(0);const[endIdx,setEndIdx]=useState(0);const[scrollTop,setScrollTop]=useState(0);constcontainerRef=useRef<HTMLDivElement>(null);constprefixSum=useMemo(()=>{constsum=[0];for(leti=0;i<data.length;i++){sum.push(sum[i]+(heights[i]||0));}returnsum;},[heights]);//計(jì)算可見范圍constcalculateRange=useCallback(()=>{if(!containerRef.current)return;constst=scrollTop;constsh=containerHeight;//二分查找startIdx:最小i滿足prefixSum[i]>=stletlow=0,high=data.length;while(low<high){constmid=(low+high)>>1;if(prefixSum[mid]>=st)high=mid;elselow=mid+1;}conststart=Math.max(0,low-5);//預(yù)加載前5項(xiàng)//計(jì)算endIdx:最大i滿足prefixSum[i]<=st+shlow=start;high=data.length;while(low<high){constmid=(low+high+1)>>1;if(prefixSum[mid]<=st+sh)low=mid;elsehigh=mid-1;}constend=Math.min(data.length-1,low+5);//預(yù)加載后5項(xiàng)setStartIdx(start);setEndIdx(end);},[scrollTop,prefixSum,containerHeight]);//監(jiān)聽滾動(dòng)事件consthandleScroll=useCallback((e:React.UIEvent)=>{setScrollTop(e.currentTarget.scrollTop);},[]);//記錄項(xiàng)高度consthandleItemRef=useCallback((idx:number)=>(el:HTMLDivElement)=>{if(el&&heights[idx]===0){setHeights

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論