このブログについて
- Expoを使いつつ、ReactNative のアプリ開発についてまとめていきます。
 - 必要に応じて、ライブラリなどの紹介します
 - チャプターごとの状態を GitHub で管理するので、必要であればクローンしてください。
 
こんな方にオススメ
- React、TypeScript などについては学んでいる
 - スマホアプリケーションの開発に興味がある
 
前提ツールのバージョン
| ツール | バージョン | 
|---|---|
| node | 22.19.0 | 
| pnpm | 10.15.1 | 
| expo(SDK) | 54 | 
過去の投稿

【1回】Expo・ReactNativeの環境構築
このブログについてExpoを使いつつ、ReactNative のアプリ開発についてまとめていきます。必要に応じて、ライブラリなどの紹介しますチャプターごとの状態を GitHub で管理するので、必要であればクローンしてください。こんな方にオ...
基本タグ
ReactNativeのタグを使ってUIを作成していきます。
以下に基本的なタグについて、他の開発環境との差分を示します。
| React Native UI Component | Android View | iOS View | Web Analog | 
|---|---|---|---|
<View> | 
<ViewGroup> | 
<UIView> | 
A non-scrolling <div> | 
<Text> | 
<TextView> | 
<UITextView> | 
<p> | 
<Image> | 
<ImageView> | 
<UIImageView> | 
<img> | 
<ScrollView> | 
<ScrollView> | 
<UIScrollView> | 
<div> | 
<TextInput> | 
<EditText> | 
<UITextField> | 
<input type="text"> | 
| Native とのタグ比較表 | 
View



View · React Native
The most fundamental component for building a UI, View is a container that supports layout with flexbox, style, some tou...
divタグのようないわゆるcontainerを作るときなどに使用する。
ReactNativeのViewだけではスクロールなどができないため、専用のコンポーネント(ScrollViewやFlatListなど)が別で用意されている。
Viewの中に直接テキストを書くことはできない。
テキストを書く場合は必ず[[#Text]]コンポーネントを用いる必要がある
Text



Text · React Native
A React component for displaying text.
テキスト・文字列を表示するためのコンポーネント。
このコンポーネント以外で直接テキストを表示しようとするとエラーになる。
| パラメータ | 型 | 備考 | 
|---|---|---|
TextInput



TextInput · React Native
A foundational component for inputting text into the app via a keyboard. Props provide configurability for several featu...
inpuタグに相当するコンポーネント。
主にテキスト関係(メールアドレスやパスワードなど)の入力のみで、ラジオボタンやチェックボックスなどは別コンポーネントになっている。
TextInputで私がよく使うpropsを下記に示します。
| パラメータ | 型 | 備考 | 
|---|---|---|
| placeholder | string | placeholderに表示する文字列 | 
| placeholderTextColor | string | placeholderの色を定義 | 
| editable | boolean | 編集可否。<br>ロード中などはtrueにすると非活性になる。 | 
| secureTextEntry | boolean | いわゆるパスワード入力時に*で隠すやつ | 
| autoCapitalize | “none” | “sentences” | “words” | “characters” | undefined| | 文字を大文字にする設定。 | 
| keyboardType | KeyboardTypeOptions | emailやnumelicなどいろいろ。<br>デバイスで使える使えないもあるので注意。 | 
| multiline | boolean | 複数行入力可否 | 
| value | string | テキストインプットの値 | 
| onChangeText | (text:string) => void | 変更イベント | 
| onBlur | (e:NativeSyntheticEvent<TextInputFocusEventData>) => void | Blurイベント | 
サンプルコード


app/_layout.tsx
import { Stack } from "expo-router";
import "react-native-reanimated";
export default function RootLayout() {
  return (
    <Stack>
      <Stack.Screen
        name="(Home)"
        options={{ title: "ホーム", headerShown: false }}
      />
    </Stack>
  );
}
app/(Home)/_layout_.tsx
import { Stack } from "expo-router";
import "react-native-reanimated";
export default function HomeLayout() {
  return (
    <Stack>
      <Stack.Screen
        name="index"
        options={{ title: "ホーム", headerShown: false }}
      />
    </Stack>
  );
}
app/(Home)/index.tsx
import React from "react";
import { Button, StyleSheet, Text, TextInput, View } from "react-native";
import { SafeAreaView } from "react-native-safe-area-context";
export default function Home() {
  const [email, setEmail] = React.useState("");
  return (
    <SafeAreaView style={styles.container}>
      <View style={styles.titleContainer}>
        <View style={styles.circle} />
        <Text style={styles.title}>Home</Text>
      </View>
      <Text>このアプリは、Expo・ReactNativeのサンプルになります。</Text>
      <TextInput
        keyboardType="email-address"
        placeholder="メールアドレス..."
        placeholderTextColor="gray"
        value={email}
        onChangeText={(text) => setEmail(text)}
        style={styles.email}
        autoCapitalize="none"
      />
      <Button title="送信" onPress={() => console.log(email)} />
    </SafeAreaView>
  );
}
const styles = StyleSheet.create({
  container: {
    flex: 1,
    padding: 20,
    gap: 8,
    flexDirection: "column",
    alignItems: "center",
    justifyContent: "flex-start",
    backgroundColor: "#f0f0f0",
  },
  titleContainer: {
    flexDirection: "row",
    alignItems: "center",
    justifyContent: "center",
    gap: 8,
  },
  circle: {
    width: 20,
    height: 20,
    borderRadius: 10,
    backgroundColor: "blue",
  },
  title: {
    fontSize: 20,
  },
  email: {
    width: "80%",
    height: 40,
    borderColor: "gray",
    borderWidth: 1,
    marginTop: 20,
    padding: 10,
    marginLeft: 10,
    borderRadius: 5,
    backgroundColor: "#ffffff",
  },
});
※ SafeAreaView ・・・ ステータスバーのところを考慮して表示してくれるViewコンポーネント
まとめ
- Expoの基本的なタグとその使い方について解説しました。
 - よく使う基本タグ
- View
 - Text
 - TextInput
 
 
参考資料
https://docs.expo.dev
Build one JavaScript/TypeScript project that runs natively on all your users' devices.



React Native · Learn once, write anywhere
A framework for building native apps for Android, iOS, and more using React
 


コメント