Skip to content

Commit 284c3b0

Browse files
authored
Merge pull request #217 from sparksuite/fix-portal-bug
Fix portal bug in React v17
2 parents 69a25ca + b272c46 commit 284c3b0

File tree

2 files changed

+10
-7
lines changed

2 files changed

+10
-7
lines changed

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-accessible-dropdown-menu-hook",
3-
"version": "2.1.1",
3+
"version": "2.1.2",
44
"description": "A simple Hook for creating fully accessible dropdown menus in React",
55
"main": "dist/use-dropdown-menu.js",
66
"types": "dist/use-dropdown-menu.d.ts",

src/use-dropdown-menu.ts

+9-6
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,13 @@ export default function useDropdownMenu(itemCount: number) {
5555

5656
// Handle listening for clicks and auto-hiding the menu
5757
useEffect(() => {
58+
// Ignore if the menu isn't open
59+
if (!isOpen) {
60+
return;
61+
}
62+
5863
// This function is designed to handle every click
5964
const handleEveryClick = (event: MouseEvent) => {
60-
// Ignore if the menu isn't open
61-
if (!isOpen) {
62-
return;
63-
}
64-
6565
// Make this happen asynchronously
6666
setTimeout(() => {
6767
// Type guard
@@ -80,7 +80,10 @@ export default function useDropdownMenu(itemCount: number) {
8080
};
8181

8282
// Add listener
83-
document.addEventListener('click', handleEveryClick);
83+
// -> Force it to be async to fix: https://github.com/facebook/react/issues/20074
84+
setTimeout(() => {
85+
document.addEventListener('click', handleEveryClick);
86+
}, 1);
8487

8588
// Return function to remove listener
8689
return () => document.removeEventListener('click', handleEveryClick);

0 commit comments

Comments
 (0)