无法 Link 使用 MUI 5 抽屉访问部分页面
Cannot Link to part of page with MUI 5 Drawer
当用户点击导航抽屉中的 Shop 按钮时,我只是想 link 到第一页的特定部分,但它没有什么都不做:
这是 MUI 5 抽屉组件的代码:
<Drawer
anchor="left"
open={open}
onClose={() => setOpen(false)}
PaperProps={{
sx: {
background: "linear-gradient(to top, #9C685B44, #9C685Bff)",
},
}}
>
<IconButton onClick={() => setOpen(false)}>
<ChevronLeftIcon sx={{ color: "white" }} />
</IconButton>
<Divider />
<List>
/////////////////////////////////
<ListItem>
<Button
// Linking to Products Section
href="#products"
startIcon={<PhoneAndroidIcon />}
sx={{
color: "white",
fontFamily: "Montserrat",
}}
>
Shop
</Button>
</ListItem>
//////////////////////////////
<ListItem>
<Badge color="error" badgeContent={badgeNumber}>
<Button
startIcon={<ShoppingCartIcon />}
sx={{
color: "white",
fontFamily: "Montserrat",
}}
>
Cart
</Button>
</Badge>
</ListItem>
</List>
</Drawer>
并且在相应的部分中,我向容器添加了一个包含产品值的 ID:
<Container maxWidth="xl" id="products">
...
</Container>
即使使用锚标记也会导致同样的问题。
有办法解决这个问题吗?
您可以使用 scrollIntoView and History.pushState() 来处理这个问题。从 Button
组件中删除 href
,而是使用其 onClick
方法调用以下内容:
// id is your section names (e.g. 'products')
// url is optional, and if not specified, is set to the document's current URL
const onNavClick = (event, id, url) =>
{
let element = document.getElementById(id)
event.preventDefault()
element.scrollIntoView()
window.history.pushState(id, id, url)
}
您可以将各种其他选项传递给 scrollIntoView
,您可以按照上面的 link 找到有关可用选项的更多信息。
当用户点击导航抽屉中的 Shop 按钮时,我只是想 link 到第一页的特定部分,但它没有什么都不做:
这是 MUI 5 抽屉组件的代码:
<Drawer
anchor="left"
open={open}
onClose={() => setOpen(false)}
PaperProps={{
sx: {
background: "linear-gradient(to top, #9C685B44, #9C685Bff)",
},
}}
>
<IconButton onClick={() => setOpen(false)}>
<ChevronLeftIcon sx={{ color: "white" }} />
</IconButton>
<Divider />
<List>
/////////////////////////////////
<ListItem>
<Button
// Linking to Products Section
href="#products"
startIcon={<PhoneAndroidIcon />}
sx={{
color: "white",
fontFamily: "Montserrat",
}}
>
Shop
</Button>
</ListItem>
//////////////////////////////
<ListItem>
<Badge color="error" badgeContent={badgeNumber}>
<Button
startIcon={<ShoppingCartIcon />}
sx={{
color: "white",
fontFamily: "Montserrat",
}}
>
Cart
</Button>
</Badge>
</ListItem>
</List>
</Drawer>
并且在相应的部分中,我向容器添加了一个包含产品值的 ID:
<Container maxWidth="xl" id="products">
...
</Container>
即使使用锚标记也会导致同样的问题。
有办法解决这个问题吗?
您可以使用 scrollIntoView and History.pushState() 来处理这个问题。从 Button
组件中删除 href
,而是使用其 onClick
方法调用以下内容:
// id is your section names (e.g. 'products')
// url is optional, and if not specified, is set to the document's current URL
const onNavClick = (event, id, url) =>
{
let element = document.getElementById(id)
event.preventDefault()
element.scrollIntoView()
window.history.pushState(id, id, url)
}
您可以将各种其他选项传递给 scrollIntoView
,您可以按照上面的 link 找到有关可用选项的更多信息。