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', });
次にこれだけど、これはiOSとAndroid用に別々のビジュアルコンポーネントを実装したい場合に使える。
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>
だけだけど、他にも使えるものはある。
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
を使った指定方法はこの記事がわかりやすい。
他の見慣れないものは下ぐらいかな。
まあ使ってみたほうがわかりやすいですよね。 react nativeの公式に試すことのできるページがあるので、挙動を見てみるといいでしょう。