test_t_55_memo

メモ書きです!

【React Native】まとめ

(参考)

www.amazon.co.jp

 

■ 型
any :「型チェックしない」ことを示す
void :「他のどの方でもない」ことを示す
tuple :組み合わせ
(例)
var tuple: [number, string] = [1, ‘a’]

 

■ interface
新しい型を作成したいとき

 

■ プロパティの末尾に、?
→指定が任意であることを指示するための書き方

 

■ 拡張子
.ts ファイル
TypeScriptファイルを示す
.tsx ファイル
TypeScriptファイル、かつ、JSX含む

 

■ Homebrew
brew —version

 

■ yarn(ヤーン)のインストール
brew install yarn
→ yarnは、npmと比較して高速に動作するパッケージマネージャ

 

■ watchman:ReactNative動作するための監視ツール
brew install watchman
watchman —version

 

■ CocoaPods:Swift・Objective-C のパッケージマネージャ
(ReactNavieは、iOSにおいてはネイティブコードをCocoaPodsで管理する。Rubyで書かれてるためgemコマンド)
sudo gem install cocoapods
pod —version

 

■ Metro Bundler:アプリを起動する際に、同時に起動され、サーバとして動作する

 

■ キャッシュクリアしたいとき(ディレクトリー名の変更 or ソースファイルの移動が反映されない場合)
npx react-natvie start —reset-cache
npx react-native start :Metro Bundlerを起動するためのコマンド
—reset-cache :キャッシュを消去するオプション

 

■ Viewコンポーネント
divにあたる。何にも表示しない。
「親」として使うことが多い。必要のないところで使うと、メモリが無駄

 

■ Textコンポーネント
Textのみの入れ子で、スタイルのカスケードが可能
※カスケード
CSSCascading Style Sheets)のCascadingとは
「階段状の滝のような」「連鎖的に伝わる」という意味
(参考)
http://www.htmq.com/csskihon/006.shtml

 

■ flexDirection:配置

column :上から下へ配置  デフォルト値

row  :左から右へ配置

 

■ justifyContent:配置ルール(flexDirection方向)
flex-start :始端側に詰める。デフォルト値
flex-end :終端側に詰める
center :中央寄せ
space-between:最初を始端、最後は終端、残りは等間隔
space-around:コンポーネントの周りのスペースを全て等しく
space-evenly:スペースを全て等間隔

 

■ alignItems:配置ルール(flexDirectionと直角方向)
flex-start :始端側に詰める。デフォルト値
flex-end :終端側に詰める
center :中央寄せ
stretch:スペースいっぱいに子コンポーネントを引き伸ばす
baseline:ベースラインにそろえる

 

■ props:コンポーネントの入力(外部から渡される)
親 → 子へデータを渡す

 

■ state:コンポーネントそのものが持つデータ
stateを使うためには、useStateを用いる
※props もしくは state の内容が変更されると再描画

 

■ useEffect:非同期させたいとき(副作用)
(引数)
第1引数:指定した関数を実行
第2引数:変数(この変数が変更されたタイミングで、第1引数の関数が実行される)配列で複数指定可能。指定しないことも可能(初期表示時のみ動作するイメージ)
(イメージ)
useEffect フックを
「componentDidMount と componentDidUpdate と componentWillUnmount がまとまったもの」と考えてOK
(参考)
https://ja.reactjs.org/docs/hooks-effect.html

 

■ Context:全コンポーネントからアクセス可能なグローバル変数..というイメージ
ユーザの属性値などを保持するイメージ(頻繁に変わる変数ではなく)

 

■ ref:コンポーネントの描画結果を変数に格納。アクセス可能とする。
reference の略。描画済みコンポーネントへの参照を与える
(例)
コンポーネントが持つメソッドを呼び出したい場合

 

サフィックス(なし・@2x・@3x)
画面の表示密度によって
実際に読み込まれるファイルが異なる
(表示密度に近いサフィックスを持つものが使用される)
サフィックスなし : 等倍 : logo.png
サフィックス@2x : 2倍 : logo@2x.png
サフィックス@3x : 3倍 : logo@3x.png

 

■ 表示密度
論理的なピクセル1つが物理的なピクセルいくつ分に相当するか表した数字
(PixelRatio.get関数で確認可)

 

■ 画像管理(iOSAndroid
iOS:Asset Catalog
Xcodeの Images.xcassets
Android:drawable
android/app/src/main/resディレクト
以下のディレクトリ名
drawable-mdpi :100%「大きさ」
drawable-hdpi :150%
drawable-xhdpi :200%
drawable-xxhdpi :300%
drawable-xxxhdpi:400%
「大きさ」は、画像ファイルの大きさをどの程度拡大すればよいのかを示す
ファイル名は、すべて同一とする

 

■ 画像
uriにネットワーク上の画像(URL)の指定可
画像はキャッシュされ、次回から高速に表示される

 

■ 画像の使い分け
UI に必要な画像・・・JavaScript層で管理
コンテンツ画像・・・ネットワーク経由
(メリット / デメリット)
JavaScript層で管理:大きな画像だと、アプリサイズが肥大。インストール時にユーザーに不利益
ネットワーク経由:初回表示に時間がかかる。ユーザが操作に困る

 

■ resizeMode
Imageコンポーネントで、リサイズ必要な場合
(resizeModeで指定可能な値)
cover:余白ができないよう画像を拡大/縮小。アスペクト比を保持。
contain:画像すべてが表示されるよう画像を拡大/縮小。アスペクト比を保持。
stretch:画像すべてが表示されるよう画像を拡大/縮小。アスペクト比を保持しない。
repeat:拡大縮小せず、左上から右上へ画像を敷き詰める。
center:拡大縮小せず、表示領域の中心を画像の中心とする。
アスペクト比とは、画面や画像の縦と横の長さ(画素数)の比
(表示サイズのパターン)
1 width:400 height:300
2 width:200 height:100
3 width:400 height:50
4 width:50 height:400

 

■ ScrollViewコンポーネント
スクロール可。

 

■ FlatList
配列を表示する際に便利
FlatListには、以下2つのpropsが必須
data:表示すべき配列
renderItem:配列内の各データをどのように描画するか

 

■ renderItem関連:指定する関数の引数
item:配列内の各データ →普段は、こちらのみ
index:配列の何番目にあるかのインデックス
separators:各データの間に表示する区切りを操作するための関数群

 

■ renderItem関連:ヘッダー・フッター
ListHeaderCompornent:ヘッダー
ListFooterComponent:フッター

 

■ SectionList
いくつかのグループに分かれているデータを表示するのに便利
(データ構造の指定が必要)

 

■ FlatList のkey
データに一意な識別子を指定する必要がある
id
key
keyExtractor

 

■ horizontal
FlatList で横スクロールしたい場合

 

■ numColomns:複数列の表示を指定できる
※horizontal と同時に指定することができない

 

■ refreshing:現在データの更新中かどうか示すboolean値
onRefresh に、ユーザがリストを下に引っ張ってデータ更新した場合の
コールバック関数を指定
※ Pull To Refresh = 下に引っ張って更新

 

■ onEndReached:データ最後のアイテムが表示された場合

 

Touchableコンポーネント
(ボタンのコンポーネント
TouchableWithoutFeedback:押下した際、見た目が変化しない
TouchableNativeFeedback:(Androidのみ)リップル効果を付与できる
TouchableOpacity:押下した際、透過度が変動
TouchableHightLight:押下した際、背景色が変動
(コールバック関数)
onPress
(非活性)
disabled

 

■ Button コンポーネント
簡易なボタン

 

■ TextInputコンポーネント
文字入力を受け取るコンポーネント
value:入力欄に表示すべき値
onChangeText:入力が変更された場合に呼ばれるコールバック関数
(TextInput のprops)
multiLine:改行を許可するかどうか
placeholder:プレースホルダ
returnKeyType:完了ボタンのラベル
secureTextEntry:非表示化
editable:編集可否
keyboardType:表示するキーボード
autoCapitalize:文字を自動的に、大文字に変換
autoCompleteType:補完時の文脈を与える
autoCorrect:自動補完の有効にするかどうか
maxLength:最大入力長

 

■ StatusBarコンポーネント
ステータスバーの見た目

 

■ ActivityIndicatorコンポーネント
何か処理している最中であることを示す(検索中みたいな場合)

 

■ Switchコンポーネント
on/off を示すUI

 

■ AppState ユーティリティ:現在のアプリの状態、変更した際の処理
(アプリが取り得る状態)
active :前面
inactive :起動アプリ一覧画面、backgroundへ移行する間(iOSのみ)
background:ホーム画面 or 他アプリが前面にある

 

■ Dimensions ユーティリティ
バイスサイズの取得 or 向きが変わった場合の処理

 

■ Linking ユーティリティ
URLを開く

 

■ PermissionsAndroid ユーティリティ
Androidのみ。アプリに許可する機能:都度ユーザにモーダルダイアログで確認してもらう
(参考)
カメラの使用したい場合は以下に追加
android/app/src/main/AndroidManifest.xml
<uses-permission android:name=“android.permission.CAMERA” />

 

============================================

パフォーマンス最適化

(参考)

www.slideshare.net

(上記より抜粋)

■メインスレッド(Native)側 = UI
・useNativeDriver
 →Animated.timing してる場合にtrueとすると改善するかも

JavaScriptスレッド(ビジネスロジック)側 = ビジネスロジック

レンダリング
レンダリング回数 = state更新回数 × 更新対象のコンポーネント

state更新
 ・useRef(画面描画と関係ない変数はuseRef)
 ・そもそも更新を減らす
更新対象のコンポーネント
 ・memo化(もしくは、pureComponent):propsに変化ない(=浅い比較)場合、再レンダリングしない

※ツール
why-did-you-renderでチェックできる