SHOEISHA iD

※旧SEメンバーシップ会員の方は、同じ登録情報(メールアドレス&パスワード)でログインいただけます

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

基礎からはじめるReact Native入門

Reactの基本を学ぼう~コンポーネントの仕組みと作り方

基礎からはじめるReact Native入門 第3回

  • X ポスト
  • このエントリーをはてなブックマークに追加

コンポーネントとprops(2)

コンポーネントを再利用する

 さて、前項で「どうせ自作のコンポーネントは、元をたどれば基底のコンポーネントの組み合わせでしかない」という話をしました。それなら、コンポーネントを自作せず、リスト7のように基底のコンポーネントを並べたほうが楽なのでしょうか。

 そういうケースもあるかもしれませんが、コンポーネントに分けると、「再利用することができる」というメリットが発生します。

 メリットの実例として、まずはWelcomeコンポーネントを再利用してみましょう。Welcomeコンポーネントを増やします(リスト8)。

[リスト8]App.js(Welcomeコンポーネントを並べる)
import React from 'react';
import { View, Text, StyleSheet } from 'react-native';

export default function App() {
  return (
    <View style={styles.container}>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </View>
  );
}

function Welcome(props) {
  return <Text>Hello, {props.name}</Text>;
}

const styles = StyleSheet.create({
// 省略

 これを実行すると、図2のようになります。

図2:コンポーネントは再利用が容易
図2:コンポーネントは再利用が容易

 Welcomeメッセージが3つ現れましたね。同じ表示になる画面部品を作って、それを使い回せる、というのは、似た部品が多く現れるアプリ開発においては、とてもありがたい特徴です。

実装を隠蔽できる

 次に、スタイルの隠蔽についても目を向けてみます。これについてはコンポーネントを別のファイルとして管理したほうがうまみが出やすいので、App.jsと同じ階層にWelcome.jsを作ってみましょう(リスト9)。

[リスト9]Welcome.js
import React from 'react';
import { Text } from 'react-native';

export function Welcome(props) {
  return <Text>Hello, {props.name}</Text>;
}

 すると、App.js側ではWelcomeコンポーネントをインポートして使うことになります(リスト10)。

[リスト10]App.js(Welcomeコンポーネントを別ファイルから取り込む)
import React from 'react';
import { View, StyleSheet } from 'react-native';
import { Welcome } from './Welcome';

export default function App() {
  return (
    <View style={styles.container}>
      <Welcome name="Sara" />
      <Welcome name="Cahal" />
      <Welcome name="Edite" />
    </View>
  );
}

const styles = StyleSheet.create({
// (省略)

 この時点で、App.jsはWelcomeコンポーネントがどんな実装になっているのかについて、関心を持たなくなりました。関心があるのは、次の2点だけです。

  • どんな名前のコンポーネントなのか
  • どんなpropsを持っているのか

 この先は、Welcomeコンポーネントのファイル内で、独自にスタイルを付けてフォントを変えたり、文面を変えたりしても、App.jsには影響がありません(リスト11)。

[リスト11]Welcome.js
import React from 'react';
import { Text, StyleSheet, Platform } from 'react-native';

export function Welcome(props) {
  return (
    <Text style={styles.text}>
      Hello, {props.name}!!
    </Text>
  );
}

const styles = StyleSheet.create({
  text: {
    fontFamily: Platform.select({
      ios: "Hiragino Mincho ProN",
      android: "serif",
    }),
    fontSize: 48,
  }
});

 App.jsには手を入れず、Welcome.jsだけを編集して、再度実行してみると、図3の表示になります。

図3:Welcomeコンポーネント内のスタイルだけを変更した
図3:Welcomeコンポーネント内のスタイルだけを変更した

 UIを適切に分割してコンポーネント化しながら定義していくことで、ある部分の修正で他の部分に影響が出ないようにするのが、コンポーネント化の醍醐味の1つです。名前を付け、propsを定義して切り出せそうな部分を見つけたら、積極的にコンポーネント化していきましょう。

まとめ

 今回は静的に定義できる範囲でUIを定義する手法を学びました。次回は、コンポーネントに状態を持たせて、UIを更新する手法について解説します。

この記事は参考になりましたか?

  • X ポスト
  • このエントリーをはてなブックマークに追加
基礎からはじめるReact Native入門連載記事一覧

もっと読む

この記事の著者

WINGSプロジェクト 中川幸哉(ナカガワユキヤ)

WINGSプロジェクトについて> 有限会社 WINGSプロジェクトが運営する、テクニカル執筆コミュニティ(代表 山田祥寛)。主にWeb開発分野の書籍/記事執筆、翻訳、講演等を幅広く手がける。2018年11月時点での登録メンバは55名で、現在も執筆メンバを募集中。興味のある方は、どしどし応募頂きたい。著書記事多数。 RSS Twitter: @yyamada(公式)、@yyamada/wings(メンバーリスト) Facebook

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

山田 祥寛(ヤマダ ヨシヒロ)

静岡県榛原町生まれ。一橋大学経済学部卒業後、NECにてシステム企画業務に携わるが、2003年4月に念願かなってフリーライターに転身。Microsoft MVP for Visual Studio and Development Technologies。執筆コミュニティ「WINGSプロジェクト」代表。主な著書に「独習シリーズ(Java・C#・Python・PHP・Ruby・JSP&サーブレットなど)」「速習シリーズ(ASP.NET Core・Vue.js・React・TypeScript・ECMAScript、Laravelなど)」「改訂3版JavaScript本格入門」「これからはじめるReact実践入門」「はじめてのAndroidアプリ開発 Kotlin編 」他、著書多数

※プロフィールは、執筆時点、または直近の記事の寄稿時点での内容です

この記事は参考になりましたか?

この記事をシェア

  • X ポスト
  • このエントリーをはてなブックマークに追加
CodeZine(コードジン)
https://codezine.jp/article/detail/11686 2019/08/23 11:00

おすすめ

アクセスランキング

アクセスランキング

イベント

CodeZine編集部では、現場で活躍するデベロッパーをスターにするためのカンファレンス「Developers Summit」や、エンジニアの生きざまをブーストするためのイベント「Developers Boost」など、さまざまなカンファレンスを企画・運営しています。

新規会員登録無料のご案内

  • ・全ての過去記事が閲覧できます
  • ・会員限定メルマガを受信できます

メールバックナンバー

アクセスランキング

アクセスランキング