native react 二级菜单_react-native – 在React Native中长按打开上下文菜单

所有可触摸组件(TouchableWithoutFeedback,TouchableOpacity等)都有一个名为

onLongPress的属性.您可以使用此prop来收听长按,然后显示上下文菜单.

为了消除代码混乱并进行大量复制粘贴,您可以将上下文菜单分离为不同的组件,并在长按时将其调用.您还可以使用ActionSheet库来显示所需的选项. React native有一个名为ActionSheetIOS的iOS原生API.如果你在react和react-native上获得更多经验,你可以为此创建一个更好的逻辑,但我将尝试在下面给你一个例子.

// file/that/contains/globally/used/functions.js

const openContextMenu = (event,user,callback) => {

ActionSheetIOS.showActionSheetWithOptions({

options: ['Copy Username','Call User','Add to favorites','Cancel'],cancelButtonIndex: [3],title: 'Hey',message : 'What do you want to do now?'

},(buttonIndexThatSelected) => {

// Do something with result

if(callback && typeof callback === 'function') callback();

});

};

export openContextMenu;

import { openContextMenu } from './file/that/contains/globally/used/functions';

export default class UserCard extends React.Component {

render() {

const { userObject } = this.props;

return(

openContextMenu(event,userObject,() => console.log('Done')}>

openContextMenu(event,() => console.log('Done'))}>

{userObject.name}

);

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
React Native中实现侧滑菜单可以使用第三方组件库,如react-native-drawer、react-native-side-menu等,也可以自己手写实现。以下是手写实现的简单示例: 1. 安装react-native-gesture-handler库 ```bash npm install react-native-gesture-handler ``` 2. 在App.js中引入GestureHandlerRootView,并在render方法中添加侧滑菜单和主页布局 ```javascript import { GestureHandlerRootView } from 'react-native-gesture-handler'; class App extends Component { constructor(props) { super(props); this.state = { isMenuOpen: false, }; } render() { return ( <GestureHandlerRootView style={{ flex: 1 }}> <View style={{ flex: 1 }}> {this.state.isMenuOpen ? <View style={{ flex: 1, backgroundColor: 'white' }}> <Text>侧滑菜单</Text> </View> : <View style={{ flex: 1, backgroundColor: 'white' }}> <Text>主页布局</Text> </View> } </View> </GestureHandlerRootView> ); } } ``` 3. 添加手势识别和动画 ```javascript import { PanGestureHandler, State } from 'react-native-gesture-handler'; class App extends Component { constructor(props) { super(props); this.state = { isMenuOpen: false, gestureState: State.UNDETERMINED, translateX: new Animated.Value(0), }; this.onGestureEvent = Animated.event( [{ nativeEvent: { translationX: this.state.translateX } }], { useNativeDriver: true } ); } onHandlerStateChange = event => { if (event.nativeEvent.oldState === State.ACTIVE) { const { translationX } = event.nativeEvent; if (translationX < -50) { this.setState({ isMenuOpen: true }); Animated.spring(this.state.translateX, { toValue: -200, useNativeDriver: true, }).start(); } else { Animated.spring(this.state.translateX, { toValue: 0, useNativeDriver: true, }).start(); } } }; render() { return ( <GestureHandlerRootView style={{ flex: 1 }}> <View style={{ flex: 1 }}> <PanGestureHandler onGestureEvent={this.onGestureEvent} onHandlerStateChange={this.onHandlerStateChange} > <Animated.View style={{ flex: 1, transform: [{ translateX: this.state.translateX }], }} > {this.state.isMenuOpen ? <View style={{ flex: 1, backgroundColor: 'white' }}> <Text>侧滑菜单</Text> </View> : <View style={{ flex: 1, backgroundColor: 'white' }}> <Text>主页布局</Text> </View> } </Animated.View> </PanGestureHandler> </View> </GestureHandlerRootView> ); } } ``` 这样就可以实现一个简单的侧滑菜单了。需要注意的是,手写实现的侧滑菜单可能会存在一些问题,如滑动冲突、性能问题等,使用第三方组件库可以避免这些问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值