-
Notifications
You must be signed in to change notification settings - Fork 263
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
fix(backtop & menu): lint, code simplification, deprecated pageYOffset removed #2633
Changes from 5 commits
6ddcc8b
9744ce0
98fa2c7
e995cb6
11b9288
b497d1d
bb1d254
693adb6
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change | ||||||||||||||||||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
@@ -1,4 +1,10 @@ | ||||||||||||||||||||||||||||||||||||
import React, { FunctionComponent, useEffect, useRef, useState } from 'react' | ||||||||||||||||||||||||||||||||||||
import React, { | ||||||||||||||||||||||||||||||||||||
FunctionComponent, | ||||||||||||||||||||||||||||||||||||
useCallback, | ||||||||||||||||||||||||||||||||||||
useEffect, | ||||||||||||||||||||||||||||||||||||
useRef, | ||||||||||||||||||||||||||||||||||||
useState, | ||||||||||||||||||||||||||||||||||||
} from 'react' | ||||||||||||||||||||||||||||||||||||
import classNames from 'classnames' | ||||||||||||||||||||||||||||||||||||
import { ArrowDown, ArrowUp } from '@nutui/icons-react' | ||||||||||||||||||||||||||||||||||||
import { OptionItem, MenuItem } from '@/packages/menuitem/menuitem' | ||||||||||||||||||||||||||||||||||||
|
@@ -53,29 +59,30 @@ | |||||||||||||||||||||||||||||||||||
...props, | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
const menuRef = useRef(null) | ||||||||||||||||||||||||||||||||||||
const [showMenuItem, setShowMenuItem] = useState<boolean[]>([]) | ||||||||||||||||||||||||||||||||||||
const [menuItemTitle, setMenuItemTitle] = useState<string[]>([]) | ||||||||||||||||||||||||||||||||||||
const [isScrollFixed, setIsScrollFixed] = useState(false) | ||||||||||||||||||||||||||||||||||||
const cls = classNames(`nut-menu`, className, { | ||||||||||||||||||||||||||||||||||||
'scroll-fixed': isScrollFixed, | ||||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const getScrollTop = (el: Element | Window) => { | ||||||||||||||||||||||||||||||||||||
return Math.max(0, 'scrollTop' in el ? el.scrollTop : el.pageYOffset) | ||||||||||||||||||||||||||||||||||||
return Math.max(0, 'scrollTop' in el ? el.scrollTop : el.scrollY) | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
const onScroll = () => { | ||||||||||||||||||||||||||||||||||||
const { scrollFixed } = props | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const onScroll = useCallback(() => { | ||||||||||||||||||||||||||||||||||||
const scrollTop = getScrollTop(window) | ||||||||||||||||||||||||||||||||||||
const isFixed = | ||||||||||||||||||||||||||||||||||||
scrollTop > (typeof scrollFixed === 'boolean' ? 30 : Number(scrollFixed)) | ||||||||||||||||||||||||||||||||||||
setIsScrollFixed(isFixed) | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
}, [scrollFixed]) | ||||||||||||||||||||||||||||||||||||
Comment on lines
+75
to
+80
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 确保 在 建议在使用前添加类型检查和默认值,例如: const isFixed =
- scrollTop > (typeof scrollFixed === 'boolean' ? 30 : Number(scrollFixed))
+ scrollTop > (typeof scrollFixed === 'boolean'
+ ? 30
+ : !isNaN(Number(scrollFixed))
+ ? Number(scrollFixed)
+ : 30) 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
useEffect(() => { | ||||||||||||||||||||||||||||||||||||
if (scrollFixed) { | ||||||||||||||||||||||||||||||||||||
window.addEventListener('scroll', onScroll) | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
return () => window.removeEventListener('scroll', onScroll) | ||||||||||||||||||||||||||||||||||||
}, []) | ||||||||||||||||||||||||||||||||||||
}, [scrollFixed, onScroll]) | ||||||||||||||||||||||||||||||||||||
|
||||||||||||||||||||||||||||||||||||
const [showMenuItem, setShowMenuItem] = useState<boolean[]>([]) | ||||||||||||||||||||||||||||||||||||
const [menuItemTitle, setMenuItemTitle] = useState<string[]>([]) | ||||||||||||||||||||||||||||||||||||
const toggleMenuItem: MenuCallBackFunction = (index, from = 'NORMAL') => { | ||||||||||||||||||||||||||||||||||||
showMenuItem[index] = !showMenuItem[index] | ||||||||||||||||||||||||||||||||||||
if (showMenuItem[index]) { | ||||||||||||||||||||||||||||||||||||
|
@@ -180,13 +187,7 @@ | |||||||||||||||||||||||||||||||||||
}) | ||||||||||||||||||||||||||||||||||||
} | ||||||||||||||||||||||||||||||||||||
return ( | ||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||
{...rest} | ||||||||||||||||||||||||||||||||||||
className={classNames(`nut-menu`, className, { | ||||||||||||||||||||||||||||||||||||
'scroll-fixed': isScrollFixed, | ||||||||||||||||||||||||||||||||||||
})} | ||||||||||||||||||||||||||||||||||||
ref={menuRef} | ||||||||||||||||||||||||||||||||||||
> | ||||||||||||||||||||||||||||||||||||
<div {...rest} className={cls} ref={menuRef}> | ||||||||||||||||||||||||||||||||||||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. 合并 在第193行, 您可以按以下方式修改代码: - <div {...rest} className={cls} ref={menuRef}>
+ <div {...rest} className={classNames(cls, rest.className)} ref={menuRef}> 📝 Committable suggestion
Suggested change
|
||||||||||||||||||||||||||||||||||||
<div | ||||||||||||||||||||||||||||||||||||
className={classNames('nut-menu-bar', { | ||||||||||||||||||||||||||||||||||||
opened: showMenuItem.includes(true), | ||||||||||||||||||||||||||||||||||||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
建议使用可选链调用
onClick
函数。可以将
onClick && onClick(e)
替换为onClick?.(e)
,使代码更简洁。应用以下修改:
📝 Committable suggestion
🧰 Tools
🪛 Biome