すべてのタッチ可能なコンポーネント(TouchableWithoutFeedback、TouchableOpacityなど)には、onLongPress
というプロパティがあります。この小道具を使用して長押しを聞いて、コンテキストメニューを表示することができます。
コードの混乱を避け、多くのコピーを貼り付けるには、コンテキストメニューを別のコンポーネントとして分けて、長押しが起きたときに呼び出すことができます。また、ActionSheetライブラリを使用して、必要なオプションを表示することもできます。 React nativeには、ActionSheetIOS
というiOS向けのネイティブAPIがあります。あなたが反応と反応のネイティブでもう少し経験を積むなら、あなたはこれに対してより良い論理を作り出すことができますが、私はあなたに以下の例を与えるつもりです。ただ、ポップアップメニューのための不可欠コントロールでonLongPress
を組み合わせ -
<TouchableWithoutFeedback onLongPress={()=>this.menu.open()}>
<View style={styles.card}>
<Text>My first contact name</Text>
<Menu ref={c => (this.menu = c)}>
<MenuTrigger text="..." />
<MenuOptions>
...
</MenuOptions>
</Menu>
</View>
</TouchableWithoutFeedback>
のようなもの、それは定型の多くに来るとき - に:特にreact-native-popup-menu
ため - 前回の答えとして同様
// 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(
<TouchableWithoutFeedback onLongPress={(event) => openContextMenu(event, userObject,() => console.log('Done')}>
<TouchableWithoutFeedback onLongPress={(event) => openContextMenu(event, userObject,() => console.log('Done'))}>
<Text>{userObject.name}</Text>
<Image source={{uri: userObject.profilePic }} />
</TouchableWithoutFeedback>
</TouchableWithoutFeedback>
);
}
}
具体的な場所または場所を参照してください。これはあまりにも広い質問です。あなたはそれに文脈を与えてください。 – bennygenel
@bennygenelはい、良い質問ではありません。私はReact and React Nativeにはあまりにも新しいです。私は何をしたいのかをもう少し説明しました、少し狭めてくれることを願っています。 –