如何解決按鈕重復(fù)點(diǎn)擊?這個(gè)問題掛了80%的人!
當(dāng)前位置:點(diǎn)晴教程→知識(shí)管理交流
→『 技術(shù)文檔交流 』
前言還記得上周我們團(tuán)隊(duì)在招聘前端工程師,一個(gè)看起來經(jīng)驗(yàn)豐富的候選人坐在我對面。 "你們項(xiàng)目中是如何處理按鈕重復(fù)點(diǎn)擊的問題的?"我拋出了這個(gè)看似簡單的問題。 "這個(gè)簡單,使用防抖就可以了。"他很快回答。 然而,當(dāng)我繼續(xù)追問細(xì)節(jié)時(shí),他卻陷入了沉思... 實(shí)際上,這個(gè)問題看似簡單,但是要真正的解決好,需要考慮很多細(xì)節(jié)。在我面試了很多候選人中,能完整答出來的不到20%。 問題背景在日常開發(fā)中,我們經(jīng)常會(huì)遇到這樣的場景:
這些問題如果處理不當(dāng),輕則影響用戶體驗(yàn),重則可能造成數(shù)據(jù)錯(cuò)誤。今天,就讓我們通過一個(gè)真實(shí)的面試場景,逐步深入這個(gè)問題 面試場景面試官:項(xiàng)目中如何處理按鈕重復(fù)點(diǎn)擊的問題? 候選人:可以使用防抖(debounce)。
面試官:那假設(shè)我防抖設(shè)置了1秒,我現(xiàn)在請求了,但是接口響應(yīng)比較慢,要3秒,用戶在這3秒內(nèi)點(diǎn)擊了多次,那怎么辦? 防抖是不是就沒用了?
候選人:可以給按鈕加上 loading 狀態(tài),點(diǎn)擊后設(shè)置 loading 為 true,等操作完成后再設(shè)置為 false。
面試官:這個(gè)思路不錯(cuò),但是如果項(xiàng)目中有很多按鈕都需要這樣處理,你會(huì)怎么做? 候選人:額...每個(gè)按鈕都寫一遍 loading 狀態(tài)管理? 面試官:那樣就會(huì)有很多重復(fù)代碼,有沒有想過怎么封裝呢?
解決方案我們可以封裝一個(gè)自定義 Hook
然后封裝一個(gè)通用的 Button 組件
使用示例
可以看到 在 handleSubmit 執(zhí)行的時(shí)候 Button 會(huì)自動(dòng)添加 loading, 在請求完成后 loading 會(huì)自動(dòng)變?yōu)?false。 方案優(yōu)勢
希望這篇文章對你有幫助! 作者:葉小秋
鏈接:https://juejin.cn/post/7494944356534714406 來源:稀土掘金 著作權(quán)歸作者所有。商業(yè)轉(zhuǎn)載請聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請注明出處。 該文章在 2025/4/22 18:20:25 編輯過 |
關(guān)鍵字查詢
相關(guān)文章
正在查詢... |