最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

React onBlur回調(diào)中使用document.activeElement返回body完美解決方案

 更新時間:2023年04月17日 09:32:06   作者:Toretto  
這篇文章主要介紹了React onBlur回調(diào)中使用document.activeElement返回body完美解決方案,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下

最開始想實(shí)現(xiàn)一個功能,點(diǎn)擊img圖標(biāo)后給出購物下拉框CartDropdown,當(dāng)img及CartDropdown失去焦點(diǎn)時隱藏CartDropdown。

最開始的核心代碼如下:

export default function Cart() {
	const [isCartOpen, setIsCartOpen] = useState(false)
	
	function clickHandler() {
		setIsCartOpen(!isCartOpen)
	}

	function closeCartDropdown() {
            if(!document.querySelector('#cart').contains(document.activeElement)) {
                    setIsCartOpen(false)
            }
	}

	return (
		<div id="cart" className="relative" onBlur={closeCartDropdown}>
			<div tabIndex={0} onClick={clickHandler} className='relative hover:-translate-y-0.5 active:translate-y-0 transition-transform cursor-pointer'>
				<img className='h-14' src="/src/assets/images/shopping_bag.png" alt="shopping bag" />
				<span className='Z-10 text-2xl font-bold absolute left-1/2 -translate-x-1/2 -translate-y-2/3' style={{top:'70%'}}>4</span>
			</div>
			{
				<CartDropdown isCartOpen={isCartOpen}/>
			}
		</div>
	)
}

這個版本的代碼中在onBlur回調(diào)中使用document.activeElement函數(shù)想要獲取當(dāng)前聚焦的元素,之后通過判斷聚焦的元素是cart組件內(nèi)的來判斷是否需要隱藏cartDropdown,但這里document.activeElement返回的都是body元素。

后面我加入了onFocus函數(shù),并在其中獲取document.activeElement卻能返回正確的結(jié)果,并且是先觸發(fā)onBlur再觸發(fā)onFocus函數(shù)。這樣就可以確定,在之前的元素失去焦點(diǎn)時,onBlur函數(shù)被調(diào)用,此時沒有焦點(diǎn)因此默認(rèn)給在body上;之后onFocus函數(shù)執(zhí)行,此時新元素獲得焦點(diǎn),因此可以正常獲取聚焦結(jié)果。

因此在onBlur中想要正確獲取聚焦元素,應(yīng)該在onFocus函數(shù)調(diào)用后,所以可以使用異步函數(shù)來完成這一點(diǎn)。我選取setTimeout來進(jìn)行異步操作,并且成功在onBlur函數(shù)中獲取到了正確的document.activeElement值。

function closeCartDropdown() {
	setTimeout(() => {
             if(!document.querySelector('#cart').contains(document.activeElement)) {
		setIsCartOpen(false)
             }
        }, 0)
}

備注:傳統(tǒng)html中blur事件是不能冒泡的,但react中進(jìn)行了特殊的處理成功模擬了冒泡,因此可以實(shí)現(xiàn)子組件失去焦點(diǎn),調(diào)用父組件回調(diào)函數(shù)的效果。

到此這篇關(guān)于React onBlur回調(diào)中使用document.activeElement返回body解決方案的文章就介紹到這了,更多相關(guān)React onBlur回調(diào)返回body內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • React事件監(jiān)聽和State狀態(tài)修改方式

    React事件監(jiān)聽和State狀態(tài)修改方式

    這篇文章主要介紹了React事件監(jiān)聽和State狀態(tài)修改方式,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-08-08
  • 淺談使用React.setState需要注意的三點(diǎn)

    淺談使用React.setState需要注意的三點(diǎn)

    本篇文章主要介紹了淺談使用React.setState需要注意的三點(diǎn),提出了三點(diǎn)對 React 新手來說是很容易忽略的地方,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-12-12
  • react獲取input輸入框的值的方法示例

    react獲取input輸入框的值的方法示例

    這篇文章主要介紹了react獲取input輸入框的值的方法示例,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • React從命令式編程到聲明式編程的原理解析

    React從命令式編程到聲明式編程的原理解析

    這篇文章主要介紹了React從命令式編程到聲明式編程,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-09-09
  • 深入理解React高階組件

    深入理解React高階組件

    本篇文章主要介紹了深入理解React高階組件,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-09-09
  • react表單受控的實(shí)現(xiàn)方案

    react表單受控的實(shí)現(xiàn)方案

    數(shù)據(jù)的受控控制一直是react里的一個痛點(diǎn),當(dāng)我想要實(shí)現(xiàn)一個輸入框的受控控制時,我需要定義一個onChange和value,手動去實(shí)現(xiàn)數(shù)據(jù)的綁定,本文小編給大家介紹了react表單受控的實(shí)現(xiàn)方案,需要的朋友可以參考下
    2023-12-12
  • React配置Redux并結(jié)合本地存儲設(shè)置token方式

    React配置Redux并結(jié)合本地存儲設(shè)置token方式

    這篇文章主要介紹了React配置Redux并結(jié)合本地存儲設(shè)置token方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-01-01
  • react native 文字輪播的實(shí)現(xiàn)示例

    react native 文字輪播的實(shí)現(xiàn)示例

    這篇文章主要介紹了react native 文字輪播的實(shí)現(xiàn)示例,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07
  • 基于React封裝一個層次模糊效果的容器組件

    基于React封裝一個層次模糊效果的容器組件

    這篇文章主要為大家詳細(xì)介紹了如何基于React封裝一個層次模糊效果的容器組件,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • 詳解React中的setState執(zhí)行機(jī)制

    詳解React中的setState執(zhí)行機(jī)制

    setState是React組件中用于更新狀態(tài)的方法,是類組件中的方法,用于更新組件的狀態(tài)并重新渲染組件,本文給大家詳細(xì)介紹了React中的setState執(zhí)行機(jī)制,文中通過代碼示例介紹的非常詳細(xì),需要的朋友可以參考下
    2023-12-12

最新評論

合江县| 福海县| 辽宁省| 翁牛特旗| 沽源县| 盘锦市| 苏尼特右旗| 陈巴尔虎旗| 阿巴嘎旗| 镇宁| 太保市| 城固县| 浠水县| 灯塔市| 达日县| 工布江达县| 剑河县| 岳阳市| 宜春市| 灵丘县| 巨鹿县| 历史| 五华县| 呼伦贝尔市| 云林县| 天柱县| 古蔺县| 梅河口市| 靖远县| 双江| 广东省| 泊头市| 凌云县| 泾源县| 康平县| 开封县| 长武县| 和龙市| 平罗县| 嵊州市| 淮阳县|