「ReactNative Meetup#5」に参加してきました

Why not React Native

メルカリ

Our choice in ReactNative

交通費生産のAndroidアプリを作った話

  • suicaタッチしてその情報(NFCタグ)を読取る
  • Reactだけどnativeの知識は必要
  • AndroidSDKでNFC読み込み
  • Nativeコンポーネント使うとこはJavaも書いてる
    • それをReactから呼び出す
    • NativeModule.xxxxxxxって呼ぶ
  • NativeアプリとReduxStateの相性がいい
  • HOC
  • Crashlytics
    • モバイルはwebよりユーザの状態によって予期せぬエラーが起きる
  • AsyncStorage

async/await 構文を使った Android とのブリッジ

Androidインテントを使って、処理結果を受け取りたい

React Native でブリッジするには

  • Android側でJS側に公開するメソッドを作成
    • @ReactNative
  • JS側で呼び出し
    • NativeModulesで呼べる

async / await を使ってstartActivityForResultの結果を受け取る

  • JSでpromiseを入れてJavaに返せる

まとめ

  • Callbackを渡す方法やAndroid→JSのブリッジを作って結果を渡す方法もある
  • しかしPromiseをasync/awaitでハンドリングするほうがスマートに書ける
  • 同期処理でない処理を行うブリッジはPromiseで統一したほうが引数もすっきりして良さそう

Animated入門

種類

  • animated
    • 複雑アニメーション
  • LayoutAnimated
    • 簡単なアニメーション

アニメーションの流れ

  1. アニメーションで変化する値の定義
  2. 変数にCSSプロパティに紐づける
  3. styleに指定
  4. 変数を渡して実行
  5. 値の変化に合わせてCSSプロパティが変化

ReactNativeでアニメーションできるview

  • AnimatedXXXというのが4種類ある

いろんなアニメーション

  • interpolate()

react-navigation について

  • hotchpotch(WAmazing CTO)
  • アプリが大きくなると・・・
  • タブとかスタックとか
    • スタック -> headerのやつ
  • 何を表示するか
    • Router + state管理
    • deeplinkからの復元

何を使うか

  • 自分で作る?ライブラリ使う?
  • pureJS?
    • jsだけで完結
  • react-native-navigation
  • native-navigation
  • react-navigation
    • pureJSベース
    • 標準
    • よくあるパターンは揃ってる
    • サンプルもある
    • Redux,Mobxだとstateのツリー構造を理解しないといけない
      • MobXの方が非同期とかやり方が決まっててやりやすい
      • Reduxはいろいろあってどうやるか悩んじゃう

ReactNativeで8個アプリを作って、1個リリースして、使ったおすすめツールを紹介

使っておくべきツール/機能

  • Hot Reload
  • Debugger
    • cmd + D
    • JS debugger?を選ぶ
  • ReactNativeDebugger
  • Firebase
    • push通知で便利
    • どこまで通知届いたかとか分からない
  • CodePush
    • Storeの審査なしでバージョンアップできる
    • JSだからできちゃう
  • Bugsnag
    • エラー検知
  • ReactNativeRouterFlux
    • どれがいいかはやはり悩みどころ
  • Atom
    • Nuclide,Deco
  • eslint
  • Redux
  • Expo
  • fastlane
    • pem PUSHの証明をコマンドで作る

Web開発者がReact Nativeで開発から運用までして辛かった事

togetter

  • ReactNativeで作り直してリリース

VUP

  • 公式のやり方でやってもコンフリクトしまくる
    • react-native-git-upgrade
  • こまめに上げないいとつらい
  • ビルドが通らなくなってつらい
  • ライブラリが対応してなかったりとかつらい