【React Native】クリップボードを扱う方法|expo-clipboardの例

今回は、React Nativeで開発しているアプリで、Expo SDKのexpo-clipboard を利用してクリップボードを扱う例となります。

【React Native】expo-clipboardでクリップボードを扱う方法

例では、以下の画面を作成し、画面上でクリップボードを扱う簡単な処理を実行できるようにします。

上記の画面では、1行目のテキスト部分をタップすると「hello world」の文字列をコピーし、2行目のテキスト部分をタップすると以下のようにクリップボード内のテキストを表示します。

実際の挙動は以下のExpo Snackで確認できます。

https://snack.expo.io/@yic666kr/react-native-expo-clipboard-sample

例では、ExpoでReactNativeの開発環境を構築してある前提としています。Expoで開発環境を構築する方法については以下のリンク先を参考にしてみてください。

expo-clipboardをインストール

まず、プロジェクトに以下のコマンドでexpo-clipboardをインストールします。

expo install expo-clipboard

クリップボードを扱うコードの例

以下、クリップボードを扱うコードの例となり、App.jsファイルに記述します。

import React, { useState } from 'react'
import { View, Text, Pressable, StyleSheet } from 'react-native'

import Clipboard from 'expo-clipboard'


const App = () => {
  const [copiedText, setCopiedText] = useState('')

  const setClip = (setText) => {
    Clipboard.setString(setText)
  }

  const getClip = () => {
    const getText = Clipboard.getStringAsync()
    getText.then((value) => {
      setCopiedText(value)
    })
  }

  const sampleText = 'hello world'

  return (
    <View style={styles.container}>
      <Pressable
       onPress={() => setClip(sampleText)}
       style={styles.item} 
      >
        <Text style={styles.text}>タップすると「{sampleText}」をコピー</Text>
      </Pressable>

      <Pressable 
        onPress={() => getClip()} 
        style={styles.item} 
      >
        <Text style={styles.text}>タップするとコピーしたテキストを表示</Text>
      </Pressable>

      <Text style={styles.copiedText}>{copiedText}</Text>
    </View>
  )
}


const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center'
  },

  item: {
    padding:  10,
  },

  text: {
    fontSize: 14,
  },
    
  copiedText: {
    fontSize: 20,
    color: 'red'
  },
})


export default App

React Nativeのコードの説明

以下、React Nativeのコードのポイントとなる箇所の説明となります。

モジュールからインポート

コードの1行目からの箇所では、次のようにモジュールから利用するコンポーネントなどをインポートしています。

import React, { useState } from 'react'
import { View, Text, Pressable, StyleSheet } from 'react-native'

import Clipboard from 'expo-clipboard'

クリップボードを扱うためのstate・関数を定義

コードの8行目からの箇所では、App関数内で次のstateと関数を定義しています。

  • コピーしたテキストを保存するstate
  • クリップボードに文字列をセットする関数setClip
  • クリップボードの文字列を取得する関数getClip
  const [copiedText, setCopiedText] = useState('')

  const setClip = (setText) => {
    Clipboard.setString(setText)
  }

  const getClip = () => {
    const getText = Clipboard.getStringAsync()
    getText.then((value) => {
      setCopiedText(value)
    })
  }

上記で利用しているクリップボードを扱うClipboardのメソッドは以下となります。

Clipboard.setString()が引数に指定した文字列を、クリップボードに保存するメソッドとなります。

Clipboard.getStringAsync()がクリップボードの内容を取得するメソッドとなります。また、非同期処理のため戻り値はPromiseとなります。

例では、取得したクリップボードの内容を定義したstateに保存しています。

画面のレンダリング

コードの21行目からの箇所では、App関数内で次のように、コピーするテキストの定義とレンダリングを返しています。

画面内では、クリップボードを扱う以下の処理を行えます。

  • 1行目のテキストをタップすると、関数のsetClipを実行して、「hello world」の文字列をコピー。
  • 2行目のテキストをタップすると、関数のgetClipを実行して、画面にクリップボード内のテキストを表示。
  const sampleText = 'hello world'

  return (
    <View style={styles.container}>
      <Pressable
       onPress={() => setClip(sampleText)}
       style={styles.item} 
      >
        <Text style={styles.text}>タップすると「{sampleText}」をコピー</Text>
      </Pressable>

      <Pressable 
        onPress={() => getClip()} 
        style={styles.item} 
      >
        <Text style={styles.text}>タップするとコピーしたテキストを表示</Text>
      </Pressable>

      <Text style={styles.copiedText}>{copiedText}</Text>
    </View>
  )
}

参考サイトなど

コメント投稿コメント投稿欄を開く

コメントは、項目欄(*は必須項目)を入力し、「コメントを送信」ボタンをクリックしてください。 (メールアドレスは公開されることはありません。コメントの公開は承認制となります。)

Twitterで返信する場合はこちらから。