React NativeでのSVGのOnPressイベントハンドリング方法


  1. TouchableOpacityを使用する方法: TouchableOpacityコンポーネントを使用してSVG要素をラップし、そのonPressプロパティにハンドラ関数を指定します。
import React from 'react';
import { TouchableOpacity, View } from 'react-native';
import Svg, { Circle } from 'react-native-svg';
const MyComponent = () => {
  const handlePress = () => {
    console.log('SVGが押されました');
  };
  return (
    <TouchableOpacity onPress={handlePress}>
      <View>
        <Svg width={100} height={100}>
          <Circle cx={50} cy={50} r={50} fill="blue" />
        </Svg>
      </View>
    </TouchableOpacity>
  );
};
export default MyComponent;
  1. TouchableWithoutFeedbackを使用する方法: TouchableWithoutFeedbackコンポーネントを使用すると、不透明な要素の上でのタッチイベントを検知できます。
import React from 'react';
import { TouchableWithoutFeedback, View } from 'react-native';
import Svg, { Circle } from 'react-native-svg';
const MyComponent = () => {
  const handlePress = () => {
    console.log('SVGが押されました');
  };
  return (
    <TouchableWithoutFeedback onPress={handlePress}>
      <View>
        <Svg width={100} height={100}>
          <Circle cx={50} cy={50} r={50} fill="blue" />
        </Svg>
      </View>
    </TouchableWithoutFeedback>
  );
};
export default MyComponent;
  1. PanResponderを使用する方法: PanResponderを使用してSVG要素にジェスチャーイベントを追加することもできます。以下の例では、SVG要素がドラッグされたときにコンソールにメッセージを表示します。
import React from 'react';
import { View, PanResponder } from 'react-native';
import Svg, { Circle } from 'react-native-svg';
const MyComponent = () => {
  const handlePanResponderMove = () => {
    console.log('SVGがドラッグされました');
  };
  const panResponder = PanResponder.create({
    onMoveShouldSetPanResponder: () => true,
    onPanResponderMove: handlePanResponderMove,
  });
  return (
    <View {...panResponder.panHandlers}>
      <Svg width={100} height={100}>
        <Circle cx={50} cy={50} r={50} fill="blue" />
      </Svg>
    </View>
  );
};
export default MyComponent;

これらの方法を使用して、React NativeでSVG要素のOnPressイベントを処理することができます。適切な方法を選択し、プロジェクトに組み込んでください。