上下文菜单
一个用于显示上下文菜单的 SwiftUI ContextMenu 组件。
For the complete documentation index, see llms.txt. Use this Use this file to discover all available pages.
Expo UI ContextMenu 与官方 SwiftUI contextMenu API 保持一致,并在长按时显示菜单。对于单击菜单交互,请改用 Menu。
安装
- npx expo install @expo/uiIf you are installing this in an existing React Native app, make sure to install expo in your project.
用法
基础上下文菜单
import { Host, ContextMenu, Button, Text } from '@expo/ui/swift-ui'; export default function BasicContextMenuExample() { return ( <Host matchContents> <ContextMenu> <ContextMenu.Items> <Button label="编辑" onPress={() => console.log('Edit')} /> <Button label="删除" role="destructive" onPress={() => console.log('Delete')} /> </ContextMenu.Items> <ContextMenu.Trigger> <Text>长按我</Text> </ContextMenu.Trigger> </ContextMenu> </Host> ); }
带系统图像的上下文菜单
import { Host, ContextMenu, Button, Text } from '@expo/ui/swift-ui'; export default function ContextMenuWithImagesExample() { return ( <Host matchContents> <ContextMenu> <ContextMenu.Items> <Button label="分享" systemImage="square.and.arrow.up" onPress={() => console.log('Share')} /> <Button label="收藏" systemImage="heart" onPress={() => console.log('Favorite')} /> <Button label="删除" systemImage="trash" role="destructive" onPress={() => console.log('Delete')} /> </ContextMenu.Items> <ContextMenu.Trigger> <Text>长按我</Text> </ContextMenu.Trigger> </ContextMenu> </Host> ); }
带预览的上下文菜单
使用 ContextMenu.Preview 可以在菜单打开时在其上方显示自定义预览。
import { View, Text as RNText } from 'react-native'; import { Host, ContextMenu, Button, Text } from '@expo/ui/swift-ui'; export default function ContextMenuWithPreviewExample() { return ( <Host matchContents> <ContextMenu> <ContextMenu.Items> <Button label="编辑" onPress={() => console.log('Edit')} /> <Button label="删除" role="destructive" onPress={() => console.log('Delete')} /> </ContextMenu.Items> <ContextMenu.Trigger> <Text>长按我</Text> </ContextMenu.Trigger> <ContextMenu.Preview> <View style={{ width: 200, height: 100, backgroundColor: '#f0f0f0', padding: 16 }}> <RNText>预览内容</RNText> </View> </ContextMenu.Preview> </ContextMenu> </Host> ); }
带选择器的上下文菜单
import { useState } from 'react'; import { Host, ContextMenu, Button, Text, Picker } from '@expo/ui/swift-ui'; import { pickerStyle, tag } from '@expo/ui/swift-ui/modifiers'; export default function ContextMenuWithPickerExample() { const [selectedIndex, setSelectedIndex] = useState<number | undefined>(0); return ( <Host matchContents> <ContextMenu> <ContextMenu.Items> <Button label="操作" onPress={() => console.log('Action')} /> <Picker label="大小" modifiers={[pickerStyle('menu')]} selection={selectedIndex} onSelectionChange={setSelectedIndex}> {['小', '中', '大'].map((option, index) => ( <Text key={index} modifiers={[tag(index)]}> {option} </Text> ))} </Picker> </ContextMenu.Items> <ContextMenu.Trigger> <Text>长按我</Text> </ContextMenu.Trigger> </ContextMenu> </Host> ); }
带分组的上下文菜单
使用 Section 和 Divider 组件来组织菜单项。
import { Host, ContextMenu, Button, Text, Section, Divider } from '@expo/ui/swift-ui'; export default function ContextMenuWithSectionsExample() { return ( <Host matchContents> <ContextMenu> <ContextMenu.Items> <Section title="操作"> <Button label="编辑" onPress={() => console.log('Edit')} /> <Button label="复制" onPress={() => console.log('Duplicate')} /> </Section> <Divider /> <Button label="删除" role="destructive" onPress={() => console.log('Delete')} /> </ContextMenu.Items> <ContextMenu.Trigger> <Text>长按我</Text> </ContextMenu.Trigger> </ContextMenu> </Host> ); }
嵌套上下文菜单
使用嵌套的 ContextMenu 组件来创建子菜单。
import { Host, ContextMenu, Button, Text } from '@expo/ui/swift-ui'; export default function NestedContextMenuExample() { return ( <Host matchContents> <ContextMenu> <ContextMenu.Items> <Button label="操作" onPress={() => console.log('Action')} /> <ContextMenu> <ContextMenu.Items> <Button label="子操作 1" onPress={() => console.log('Sub 1')} /> <Button label="子操作 2" onPress={() => console.log('Sub 2')} /> </ContextMenu.Items> <ContextMenu.Trigger> <Button label="更多选项" /> </ContextMenu.Trigger> </ContextMenu> </ContextMenu.Items> <ContextMenu.Trigger> <Text>长按我</Text> </ContextMenu.Trigger> </ContextMenu> </Host> ); }
API
import { ContextMenu } from '@expo/ui/swift-ui';
Components
Type: React.Element<ContextMenuProps>
ContextMenu allows you to create a context menu, which can be used to provide additional options to the user.
Props of the ContextMenu component.
ReactNodeThe contents of the context menu.
Should include ContextMenu.Trigger, ContextMenu.Items, and optionally ContextMenu.Preview.
Type: React.Element<{
children: ReactNode
}>
Items visible inside the context menu. It could be Section, Divider, Button, Toggle, Picker or even ContextMenu itself for nested menus. Remember to use components from the @expo/ui/swift-ui library.