On Open Change
The onOpenChange
prop is used to handle the changes when a submenu is opened or closed.
Props
onOpenChange?: (open: boolean) => void
With Parameter
This example demonstrates the onOpenChange
prop with a boolean parameter. When the submenu is opened or closed, the onOpenChange
function is called with a boolean parameter indicating the new state of the submenu.
Example
/vertical-menu/submenu/on-open-change/with-params
Toggle Dashbord Submenu to see the change
Submenu is closed
Source Code
- TSX
- JS
'use client'
// React imports
import { useState } from 'react'
// Component imports
import VerticalNav, { Menu, MenuItem, SubMenu } from '@menu/vertical-menu'
const SubMenuWithParams = () => {
// States
const [text, setText] = useState('closed')
return (
<div className='flex'>
<VerticalNav customBreakpoint='200px'>
<Menu>
<SubMenu
label='Dashboards'
onOpenChange={(open: boolean) => {
setText(open ? 'opened' : 'closed')
}}
>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</VerticalNav>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu to see the change</p>
<br />
<i>{`Submenu is ${text}`}</i>
</main>
</div>
)
}
export default SubMenuWithParams
'use client'
// React imports
import { useState } from 'react'
// Component imports
import VerticalNav, { Menu, MenuItem, SubMenu } from '@menu/vertical-menu'
const SubMenuWithParams = () => {
// States
const [text, setText] = useState('closed')
return (
<div className='flex'>
<VerticalNav customBreakpoint='200px'>
<Menu>
<SubMenu
label='Dashboards'
onOpenChange={open => {
setText(open ? 'opened' : 'closed')
}}
>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</VerticalNav>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu to see the change</p>
<br />
<i>{`Submenu is ${text}`}</i>
</main>
</div>
)
}
export default SubMenuWithParams
Without Parameter
This example illustrates the onOpenChange
prop without any parameters.
Example
/vertical-menu/submenu/on-open-change/without-params
Toggle Dashbord Submenu and Check your console
Source Code
- TSX
- JS
'use client'
// React imports
import { useState } from 'react'
// Component imports
import VerticalNav, { Menu, MenuItem, SubMenu } from '@menu/vertical-menu'
const SubMenuWithParams = () => {
// States
const [text, setText] = useState('closed')
return (
<div className='flex'>
<VerticalNav customBreakpoint='200px'>
<Menu>
<SubMenu
label='Dashboards'
onOpenChange={(open: boolean) => {
setText(open ? 'opened' : 'closed')
}}
>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</VerticalNav>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu to see the change</p>
<br />
<i>{`Submenu is ${text}`}</i>
</main>
</div>
)
}
export default SubMenuWithParams
'use client'
// React imports
import { useState } from 'react'
// Component imports
import VerticalNav, { Menu, MenuItem, SubMenu } from '@menu/vertical-menu'
const SubMenuWithParams = () => {
// States
const [text, setText] = useState('closed')
return (
<div className='flex'>
<VerticalNav customBreakpoint='200px'>
<Menu>
<SubMenu
label='Dashboards'
onOpenChange={open => {
setText(open ? 'opened' : 'closed')
}}
>
<MenuItem>Analytics</MenuItem>
<MenuItem>eCommerce</MenuItem>
</SubMenu>
<SubMenu label='User'>
<MenuItem>List</MenuItem>
<SubMenu label='View'>
<MenuItem>Overview</MenuItem>
<MenuItem>Security</MenuItem>
<MenuItem>Notifications</MenuItem>
</SubMenu>
</SubMenu>
<SubMenu label='Menu Level'>
<MenuItem>Menu Level 2.1</MenuItem>
<SubMenu label='Menu Level 2.2'>
<MenuItem>Menu Level 3.1</MenuItem>
<MenuItem>Menu Level 3.2</MenuItem>
</SubMenu>
</SubMenu>
</Menu>
</VerticalNav>
<main className='p-4 flex-grow'>
<p>Toggle Dashbord Submenu to see the change</p>
<br />
<i>{`Submenu is ${text}`}</i>
</main>
</div>
)
}
export default SubMenuWithParams