React Nativeで買い物リストアプリを作ってiOS/Androidで動作させた

やりたかったこと

React Nativeに入門するも、Hello Worldより先になかなか進まなかったので、小さな物でもいいのである程度使えるアプリを作ってみることにした。

お題としてTODOリストのような一般的な物を作ることにしたため、どう実装するかはさておいて、機能については悩みどころがなかったのはよかったと思う。

何を作ろう?どんな機能が必要だろう?から考えてしまうとなかなか進まないので、おきまりの物を作ろうと割り切った。

スクリーンショット

見た目はiOS/Androidもほぼ同じ。

iOS

iOSに合わせてレイアウトした。

f:id:ariarijp:20171107131645p:plain

Android

上に若干余白があるが、本来はプラットフォーム別に調整できるところをサボっているだけ。

f:id:ariarijp:20171107133404p:plain

リポジトリ

この記事を書いた時点ではREADMEすら書いてないけど、React Nativeの環境ができていれば、 git clone して cd して npm i の後に react-native run-ios とかやれば動くはず。

github.com

主に使ったコンポーネント/API

悩んだところ

コンポーネントの分割粒度

今回は作りきることが目的だったのでざっくり分けたが、ネイティブもReactも経験が少ないので筋のいい分け方が知りたい。

FlatListの扱いに悩んだ

アイテムが追加されても、FlatListをスクロールするまで新しいアイテムが再描画されなかった。

extraDataというpropを設定し、その値も合わせて更新することで再描画してくれるようになったが、extraDataに配列を渡しても変更を検出してくれないようなので、数値などの値にする必要があるようだ。今回は表示対象のアイテムを保持する配列の長さをextraDataとして使用した。

stackoverflow.com

thisの扱い

必要に応じてbindを使って解決したが、bindを使わずにスマートにかけるのであればその方法を知りたい。

developer.mozilla.org

まとめ

  • ある程度JavaScriptが書ければ簡単なアプリは作れる
  • 小さい規模であれば、差異をほぼ気にせずにクロスプラットフォーム対応できた
  • 検索して得られる情報も増えていきたので、エラーや予期しない挙動があってもなんとか解決できる状況になってきた
  • 環境構築やシミュレーターでの動作確認に躓くと厳しそう。その場合はネイティブの知識が必要になりそうな気がする

個人的にはもうちょっとJavaScriptとその周辺エコシステムを学んだら、もうちょっと気分良くかけるかも。

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発

初めてのJavaScript 第3版 ―ES2015以降の最新ウェブ開発