---
title: Use Native Menus for Dropdowns and Context Menus
impact: HIGH
impactDescription: native accessibility, platform-consistent UX
tags: user-interface, menus, context-menus, zeego, accessibility
---
## Use Native Menus for Dropdowns and Context Menus
Use native platform menus instead of custom JS implementations. Native menus
provide built-in accessibility, consistent platform UX, and better performance.
Use [zeego](https://zeego.dev) for cross-platform native menus.
**Incorrect (custom JS menu):**
```tsx
import { useState } from 'react'
import { View, Pressable, Text } from 'react-native'
function MyMenu() {
const [open, setOpen] = useState(false)
return (
setOpen(!open)}>
Open Menu
{open && (
console.log('edit')}>
Edit
console.log('delete')}>
Delete
)}
)
}
```
**Correct (native menu with zeego):**
```tsx
import * as DropdownMenu from 'zeego/dropdown-menu'
function MyMenu() {
return (
Open Menu
console.log('edit')}>
Edit
console.log('delete')}
>
Delete
)
}
```
**Context menu (long-press):**
```tsx
import * as ContextMenu from 'zeego/context-menu'
function MyContextMenu() {
return (
Long press me
console.log('copy')}>
Copy
console.log('paste')}>
Paste
)
}
```
**Checkbox items:**
```tsx
import * as DropdownMenu from 'zeego/dropdown-menu'
function SettingsMenu() {
const [notifications, setNotifications] = useState(true)
return (
Settings
setNotifications((prev) => !prev)}
>
Notifications
)
}
```
**Submenus:**
```tsx
import * as DropdownMenu from 'zeego/dropdown-menu'
function MenuWithSubmenu() {
return (
Options
console.log('home')}>
Home
More Options
Settings
Help
)
}
```
Reference: [Zeego Documentation](https://zeego.dev/components/dropdown-menu)