【ReactNative】初期状態のApp.jsを読み解く

react-nativeでアプリを作成した時に、App.jsの中身がどうなっているのか知りたかったので、メモ。

プロジェクト作成

react-native init プロジェクト名

react nativeは上のコマンドでプロジェクトを生成する。

ツリー構造

.
├── App.js
├── __tests__
├── android
├── app.json
├── index.js
├── ios
├── node_modules
├── package-lock.json
└── package.json

react nativeのディレクトリ構造はこんな感じ。

シミュレーターの起動

react-native run-ios

上記のコマンドを打てば、xcodeのシミュレーターが起動してどんな画面表示になるのか確認することができる。

初期表示は、App.jsにある文言が表示されるのが確認できる。

App.jsの中身

import React, { Component } from 'react';
import {
  Platform,
  StyleSheet,
  Text,
  View
} from 'react-native';

Reactをimport。react-nativeからTextやView、StyleSheetといったものを使えるようにする。 ViewはHTMLでいうdiv、Textはaタグやspanのようなものととらえておけば良さそう。StyleSheetは、イメージどおりViewやTextを装飾するためのもの。cssですね。

const instructions = Platform.select({
  ios: 'Press Cmd+R to reload,\n' +
    'Cmd+D or shake for dev menu',
  android: 'Double tap R on your keyboard to reload,\n' +
    'Shake or press menu button for dev menu',
});

次にこれだけど、これはiOSAndroid用に別々のビジュアルコンポーネントを実装したい場合に使える。 iosであれば、ios:で指定した文言が、androidであれば、android:で指定した文言が表示される。

Platformモジュールを見てみるとできることがわかる。

Platform Specific Code · React Native

export default class App extends Component<Props> {
  render() {
    return (
      <View style={styles.container}>
        <Text style={styles.welcome}>
          Welcome to React Native!
        </Text>
        <Text style={styles.instructions}>
          To get started, edit App.js
        </Text>
        <Text style={styles.instructions}>
          {instructions}
        </Text>
      </View>
    );
  }
}

これは、シミュレーターを起動した時に最初に表示されているやつですね。文言を変えれば、シミュレーターの表示も変わるはず。

ComponentクラスをAppが継承しています。ということは、Componentクラスの関数等を使うことができますね。render関数なんかは、Componentクラスが持っているものです。return内に書いたものが、最終的に画面に表示される。 表示させる際には、<View><Text>を使う。HTMLと同じ感覚で書けるのが良いね。styleっていうのが次に書くけど、これでデザインを作っている。

ここで使用しているのは<View><Text>だけだけど、他にも使えるものはある。

f:id:utr066:20180227104113p:plain

Components and APIs · React Native

基本的なものはこれらを使えば表現できるかな。

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    alignItems: 'center',
    backgroundColor: '#F5FCFF',
  },
  welcome: {
    fontSize: 20,
    textAlign: 'center',
    margin: 10,
  },
  instructions: {
    textAlign: 'center',
    color: '#333333',
    marginBottom: 5,
  },
});

これはスタイルの記述。さっき指定してあったstyle={styles.container}のcontainerの部分が見あたる。その名前に対応したcssを書いていけば、反映される。HTMLとCSSの関係と同じ。 プロパティの書き方がちょっと違うけど、大体そのままキャメルケースで書ける。

もちろんHTMLのように愚直にこういった書き方をすることも可能。

<View style={{width: 50, height: 50, backgroundColor: 'steelblue'}} />

まあ、あんまりしないと思うけど。

また、flexを使うことで、画面日配に広がるデザインを簡単に適用可能。flexを使った指定方法はこの記事がわかりやすい。

ReactNativeのFlexboxレイアウト

他の見慣れないものは下ぐらいかな。

まあ使ってみたほうがわかりやすいですよね。 react nativeの公式に試すことのできるページがあるので、挙動を見てみるといいでしょう。

Layout with Flexbox · React Native