Author: T.Takaku

  • 画像トリミング機能を提供するJSライブラリ「react-image-crop」の紹介

    画像トリミング機能を提供するJSライブラリ「react-image-crop」の紹介

    画像トリミング機能は、ビューアソフト等に見られる代表的な機能のひとつであるが、Webアプリに実装しなければならないシーンは滅多に遭遇しない。一方でサムネイルの生成であれば、サーバサイドで一定サイズにトリミングすることを考えられるが、WebアプリのGUIツールとなると、なかなか骨が折れそうな実装になりそうだ。スクラッチ開発など非効率が過ぎる。 とはいえ、件の機能要件が盛り込まれないとも限らないわけで、その準備はしておきたい。 このエントリーでは、画像トリミングツールを提供するJSライブラリ「react-image-crop」を紹介したい。 react-image-crop について react-image-cropは、画像ビューアソフトやデザインツールに見られるGUIトリミング機能を実装するReactコンポーネントだ。マウスによる操作で切り抜きたい範囲を選択することで、新たな画像を描画することができる。 https://github.com/DominicTobias/react-image-crop 特徴 レスポンシブ対応 タッチイベント対応 トリミングモードの切り替え(任意/アスペクト比) キーボードイベント対応 他ライブラリに依存しない インストール 設置 設定 props name type default hint src(必須) string 画像ファイルを指定 onChange(必須) Function チェンジイベントに応じて発生するコールバック crop(必須) Object トリミングパラメータを定義 minWidth number 0 トリミング最小幅 minHeight number 0 トリミング最小高さ maxWidth number トリミング最大幅 maxHeight number トリミング最大高さ keepSelection bool false 選択領域外のクリックで、選択解除するか否か disabled bool false 非活性 locked bool false…

  • Googleマップアプリのスワイプパネルを再現する「rn-swipeable-panel」を紹介

    Googleマップアプリのスワイプパネルを再現する「rn-swipeable-panel」を紹介

    Googleマップアプリを起動するとスクリーン下部にスワイプパネルの存在に気づく。ここには、対象エリアのスポット情報を案内されている。おもにグルメ種がカテゴライズされていて、パネル内の操作で事足りる場合もある。 このようにスクリーン上の情報に関連したことを表示させるには、優れたUIになり得るスワイプパネルだが、スクラッチで実装となると<Animated.View />等の制御に加え、各種イベント処理を書かねばならない。きっと面倒くさいことになるはずだ。 Googleマップアプリのスワイプパネル風にしたい場合に、快適な手段がある。 このエントリーでは、スクリーン下部から現れるスワイプパネル実装の「rn-swipeable-panel」を紹介したい。 rn-swipeable-panel について rn-swipeable-panelは、React Nativeアプリに実装できるぼボトムパネルコンポーネントだ。スクリーン下部に現れた後、上に引き伸ばしたり押し下げたり閉じたりできる。 特徴 Googleマップアプリのスポット情報パネルっぽいことができる モーダルUIの代替としても可 インストール インポート 設定 props name type default hint isActive bool false パネルの表示/非表示 onClose Function パネルが閉じたとき発火 showCloseButton bool 閉じるボタンを表示するか否か fullWidth bool false フルサイズにするか否か openLarge bool false デフォルトで大きく開くか否か onlyLarge bool false 大きく開くのみにするか否か noBackgroundOpacity bool false 不透明度を無効にするか否か style Object {} パネルのスタイルをオーバーライドする closeRootStyle Object {} 閉じるボタンのベーススタイルをオーバーライドする closeIconStyle…

  • [React]ドラッグ&ドロップのファイルアップロードを簡単実装!「react-dropzone」の紹介

    [React]ドラッグ&ドロップのファイルアップロードを簡単実装!「react-dropzone」の紹介

    ファイルアップロードUI設計のややこしさときたら…。<input type=”file” />で済むのなら、なんと明快なことか。そういう覚えはないだろうか。 <input type=”file” />だけであってもボタンとファイル名のスタイルを制御しなければならない。ブラウザそれぞれのUIも考慮しなければならない。そのうえユーザビリティの配慮からドラッグ&ドロップ機構が求められた場合、さらにややこしい。やれないことはないけど実装時間がかさむ。 これらネガティブな感情を払拭して余りある素晴らしいReactコンポーネントがある。 このエントリーでは、ドラッグ&ドロップのファイルアップロード実装を簡単にする「react-dropzone」を紹介したい。 react-dropzone について react-dropzoneは、ドラッグ&ドロップでファイルアップロードUIを簡単に実装するためのReactコンポーネントだ。さらにReactアプリ開発のトレンドともいえるReact hooksに対応した作りをしている。ダウンロード数は、317,004(2020/1/6現在)と同種のものと比べると大きくリードしている。いわばファイルアップロードReactコンポーネントの決定版と言って差し支えないだろう。 https://react-dropzone.js.org/ 特徴 HTML5に準拠 React hooksに対応 スタイル適用が最小限 自由にスタイル適用が可能 react-dropzone に触る それではreact-dropzoneの導入から確認していこう。 インストール まずはパッケージをインストールする。package.json同階層で以下コマンドを実行してほしい。インストールするパッケージは「react-dropzone」のみでよい。 インポート インポート方法は2パターン用意されている。まずは、React hooksを使う場合。React hooksを使うわけだからReactのバージョンは16.8以上である必要がある。 もう一方は、ラッパーコンポーネントを使う場合。上記のReact hooksを使えない場合などの代替案と捉えるか、Class componentにしている場合は、いたし方なくラッパーコンポーネントをインポートしよう。 デモンストレーション 下記ソースコードは公式にもある、もっともシンプルなドラッグ&ドロップファイルアップロード実装で、ファイルをエリアにドロップするとファイル名が表示されるというものだ。 まとめ ドラッグ&ドロップのファイルアップロード実装を簡単にする「react-dropzone」の紹介だった。 実装して気がつくことがある。それはスタイル適用する要素が思いのほか多く残されていること。これは悪い意味ではなくて好感が持てる箇所だと感じた。なぜなら、打ち消しのスタイルを記述することがなく、ソースコードに素直さを保てたからだ。対象要素にclassNameを与えることはできるが、これは決してreact-dropzoneが割り振るclassNameをオーバーライドするためのものではない。上書きする記述が混在しないシンプルなソースコードを保てて良い。ファイルアップロード要件がある場合は「react-dropzone」を検討してみてはいかがだろうか。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。

  • 遅ればせながらAtomからVSCodeに乗り換えました。移行手順について

    遅ればせながらAtomからVSCodeに乗り換えました。移行手順について

    マークアップエンジニアにおいてエディタは、もっとも身近なツールのひとつで、あなたもきっと日頃使い慣れたエディタでコーディングをしていることだろう。わたしはAtom editorが主ツールでいかなるシーンにおいても活用しているが、それと同時に不便さも覚える。 あなたは不便を感じたとき、どうするだろうか?我慢してそのまま使い続ける?拡張機能で解消する?別のエディタを検討する? わたし自身は、しばらくAtomを使い続けて、なかなか手放すことができなかったのだけれど、いよいよ不満に耐えかねてVSCodeへ乗り換えを実施した。その手順を記しておきたい。 なぜVSCodeか? 単純にトレンドだから。安直ではあるが、Atomを使った理由もフロントエンド界隈でトレンドだったから乗り換えたと記憶している。 VSCodeを選択した理由は上述のとおりだが、乗り換えに踏み切った要因は、不便さを覚えた作業をVSCodeで試したところスムーズに動作したことが挙げられる。プロジェクトフォルダを多数表示させなければならないとき、フリーズしたり落ちたりするケースが頻発した。ところがVSCodeだと平然と動作し続けるではないか。これにはとても心を動かされた。 冒頭にも述べたとおり、日頃使い慣れたエディタでコーディングしているわけで、ツールの不良は作業者のストレスとなって、果ては仕事のクオリティに影響するかもしれない。 そう思ったら居ても立ってもいられず乗り換えに踏み切った。そういう次第だ。 設定したこと エディタの乗り換えにおいて重要なのが「操作感」。乗り換えた直後も大体同じように作業できるか否かが重要だ。Atom editorは長年使い続けたことで、いくつかの拡張機能やショートカットキーなど身体が覚えている操作というものなど一緒にしておきたい。それを踏まえて以下のようにした。 「ようこそページ」をOFF 初期インストールしたときには必ず表示されるスクリーンで、ヘルプや設定等へのリンクが示されているが大体不要だろう。「起動時にウェルカムページを表示」のチェックを外すことで今後表示しないようにする。 「Trim Final Newlines」をON 最後の行以降の空白行を削除したい。ツールバーの「Code – 基本設定 – 設定」から設定画面を開く。スクリーン上部の検索フィールドに「Trim Final Newlines」を入力することで対象のものが見つかる。「有効にすると、ファイルの保存時に最終行以降の新しい行をトリミングします。」にチェックを付ける。 「Trim Trailing Whitespace」をON 行末尾の半角を削除したい。ツールバーの「Code – 基本設定 – 設定」から設定画面を開く。スクリーン上部の検索フィールドに「Trim Trailing Whitespace」を入力することで対象のものが見つかる。「有効にすると、ファイルの保存時に末尾の空白をトリミングします。」にチェックを付ける。 タブサイズを変える 1つのタブに相当する半角スペース数を変更したい。デフォルトでは1回のタブキー入力で、4つ半角スペースが挿入される。これを2つ半角スペースにする。ツールバーの「Code – 基本設定 – 設定」から設定画面を開く。スクリーン上部の検索フィールドに「Tab Size」を入力することで対象のものが見つかる。「4 → 2」にする。 フォントサイズを変える フォントサイズを変更したい。デフォルト値は12pxだ。これを13pxにする。ツールバーの「Code – 基本設定 – 設定」からVSCodeの定画面を開く。スクリーン上部の検索フィールドに「Font Size」を入力することで対象のものが見つかる。「12 → 13」にする。 空白文字を表示する 空白を視覚化したい。ドットになるあれだ。ツールバーの「Code –…

  • map,areaタグのイメージマップを生成するWebツール

    map,areaタグのイメージマップを生成するWebツール

    ごく稀に画像の特定エリアにリンク領域を設定しなければならない要件に遭遇する。いわゆるイメージマップのことで、単純な領域ならばデザインソフトで調べることもできるが、多角形ともなると一つひとつ座標を求めなければならず、とてもじゃないがやってられない。 そんなときに役立つのがWebツールだ。このエントリーでは、イメージマップを生成するWebツールを紹介したい。 イメージマップするWebツール HTML Imagemap Generatorは、イメージマップ生成ツールだ。任意の画像ファイルを基準に矩形、円形、多角形を描画する機能を備えている。それら操作に応じてHTMLが編成され、画面に表示される。ユーザーはそれをコピペすれば済む。非常にインタラクティブに優れたWebツールとなっている。 HTML Imagemap Generatorhttp://labs.d-s-b.jp/ImagemapGenerator/ 前述の「HTML Imagemap Generator」とは別のイメージマップ生成ツールも紹介しよう。このImage Map Generatorも同様に、任意の画像ファイルを基準に矩形、円形、多角形を描画する機能を備えている。相違するところは、href属性値とtitle属性値を設定できる程度だ。 Image Map Generatorhttps://imagemap.org/ まとめ イメージマップを生成するWebツールの紹介だった。 その昔、イメージマップの生成は、Adobe Dreamweaverを用いたことがあった。Adobe Dreamweaverでコーディングすることがクールに感じられていたころの話だ。しかし、いまどきAdobe Dreamweaverを使ってコーディングするエンジニアは少ないだろう。リンク領域を求めるためだけにインストールしておく必要が感じられない。たとえそれを許容したところでイメージマップは、忘れたころにやってくるのだから操作が簡単なもののほうが良さそうだ。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。

  • Reactアプリ用に再設計されたUIフレームワーク「react-bootstrap」を紹介

    Reactアプリ用に再設計されたUIフレームワーク「react-bootstrap」を紹介

    UIフレームワークの「Material-UI」は、Material Designを踏襲したReactコンポーネントであるが、Webアプリ全般における「Bootstrap」の知名度や実績には遠く及ばない。github stars数からも認識できることだが、Reactアプリ開発ともなると状況は一変して、やはり「Material-UI」が使われるケースのほうが多いように思う。 とはいえReactアプリ開発にも「Bootstrap」を導入したいケースがあるかもしれない。たとえば既存アプリと整合性を保つためだったり使い慣れていたりで、依然として需要があることだろう。 このエントリーでは、Reactアプリ用に再設計されたUIフレームワーク「react-bootstrap」を紹介したい。 react-bootstrap について react-bootstrapは、言わずと知れたフロントエンドフレームワーク界の雄「Bootstrap」をReactコンポーネントとして再構築したUIフレームワークだ。Reactコンポーネント構築に際して、jQueryを廃すことで純粋なUIフレームワークに昇華している。 特徴 プレーンBootstrapのスタイルシートに完全依存 jQueryなど不要な依存関係を廃している Reactコンポーネント化されている react-bootstrap に触る さっそくreact-bootstrapに触れていこう。 インストール まずモジュールパッケージをインストールする。インストールするものは次の2つ。 react-bootstrap bootstrap CSSを設置 import 前述したとおりプレーンBootstrapのスタイルシートに完全依存したものであるためreact-bootstrapはCSSファイルを含まず、プレーンBootstrapのCSSファイルをimportすることでスタイルを適用する。 このCSSファイルは、Bootstrap全般のスタイルシートを含むため、index.jsやApp.jsなどのルートコンポーネントに読み込ませるとよいだろう。 CDN もし上述のCSS importをしたくないならば、CDNからCSSを読み込む手段がある。これの利点としては、ユーザーが別サイトで当該CDNサービス経由でCSSを読み込んでいた場合に限り、ロード時間が短縮されてユーザビリティに寄与します。 コンポーネントを設置 パッケージモジュールから各種エクスポートコンポーネントをインポートする。対象コンポーネントのディレクトリまで明示する方法と分割代入でインポートする方法がある。およそのケースで分割代入が便利だろうと思う。以下はボタンコンポーネントをインポートしている。 デモンストレーション まとめ Reactアプリ用に再設計されたUIフレームワーク「react-bootstrap」の紹介だった。 プレーンBootstrapを使うときとの相違点として、JSX形式で記述することが挙げられる。本来ならば対象タグにclassを付与することでUIを形成していたが、react-bootstrapはコンポーネントとして読み込み、コンポーネント名のタグを設置する。非常に明快な仕様だと感じた。スタイルテーマにおいても属性(props)で操作が可能だ。Reactアプリ開発でUIフレームワークの導入を求められたならば、検討してみてはいかがだろうか。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。

  • Reactアプリのフォーム実装を楽にするライブラリ「Formik」の使い方

    Reactアプリのフォーム実装を楽にするライブラリ「Formik」の使い方

    Webアプリにおいてフォーム機能は不可欠で、もっとも身近なものにログインフォームやお問い合わせフォームなどがある。これらはユーザインタフェースに該当するもので、Webアプリとユーザー間で情報のやり取りするために用いられるツールだ。 実装の側面では、複数の要件が組み合わさリ形成される。たとえば、フォームに関わる状態管理、バリデーションチェック、エラーメッセージの描画、フォーム操作に関わるハンドラーなどだ。これらを複合的に機能させるのだから小難しい実装であるのは間違いない。 このエントリーでは、Reactアプリのフォーム実装を楽にするライブラリ「Formik」を紹介したい。 Formik について Formikは、Reactアプリのフォーム実装を協力にサポートするライブラリだ。 Formikと対比されるライブラリにRedux-Formがある。Redux-FormはRedux Storeによる状態管理が主で、Reduxのセットアップが求められる反面、Formikならばローカル状態管理で済む。ローカルの一時的な状態ということで、パフォーマンスが良くスケーラブルなところが好まれてフォーム実装で覇権をふるっている。 【Formik】https://jaredpalmer.com/formik/ https://github.com/jaredpalmer/formik 特徴 フォームに関わる状態管理 バリデーションチェック エラーメッセージの描画 フォーム操作に関わるイベントハンドラー React Nativeに対応 Formik を使う それではFormikのインストールとデモンストレーションをご覧いただこう。 インストール インストールは下記コマンドで行う。例のごとく2パターンあるから都合のよい方を実行する。 デモンストレーション 下記ソースコードは、メールアドレス入力フィールドと送信ボタンがあるだけの、もっとも単純なフォーム構成のデモンストレーションだ。 まとめ Reactアプリのフォーム実装を楽にするライブラリ「Formik」の紹介だった。 デモンストレーションではスタイルを適用していない。スタイルを適用する場合は、対象タグにclass属性を付与するなりインラインスタイルを当てるなりしなければならない。たとえば<Field class=”input-email” />という具合だ。もしくは「formik-material-ui」なるラッパーもあるようで、これならばMaterial UIが適用される模様だ。管理画面などで適度な見栄えを求められたならば導入を検討しても良さそうだ。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。

  • Webサイトのコーディングに役立つWebツール8選

    Webサイトのコーディングに役立つWebツール8選

    道具や工具は、なにかの作業をするとき補助的役割をしてくれる。たとえばハンマーであれば、釘を打ったり打ち砕いたりの作業に欠かせない。ノコギリであれば、木材を切断するために活躍する。これらをITの用語ではユーティリティやソフトウェアなどと呼ばれることもあり、Web上で利用できるものをWebツールやWebサービスと呼ぶ。 道具や工具と同様に、欠かせないWebツールは各種ジャンルにあるもので、作業がはかどった経験があるのではないだろうか。 このエントリーでは、サイトコーディングに役立つWebツールをいくつか紹介したい。 Diffchecker https://www.diffchecker.com/ Diffcheckerは、差分をチェックしてくれる。納品後の修正依頼でクライアントによる修正がどの程度及んでいるか確認するために利用することが多い。瑕疵か追加対応かの判断に役立つ。 Postwoman https://postwoman.io/ Postwomanは、APIクライアントだ。公開されているWebAPIやサーバーサイドでこしらえたAPIリクエストを試すことができる。アプリケーションのPostmanのようなものだ。返り値の構造を確認したいときに役立つ。 アスペクト比計算ツール https://aspect.arc-one.jp/ 縦横比を計算してくれる。レスポンシブデザインをコーディングする場合において、youtubeやGoogle mapの埋め込みに用いられるiframeや2Dグラフィック描画に用いるcanvasで縦横比を保持させるためのパーセント値を算出するときに役立つ。 HTML5 子要素・親要素対応 https://yoshikawaweb.com/element/ HTML5 子要素・親要素対応は、HTMLの梱包および内包が許される関係を視覚化したツールだ。記憶してしまえばそれまでの情報なのだが、HTMLタグの親子関係を説明するときに役立つ。 PXtoEM.com http://pxtoem.com/ PXtoEM.comは、CSSのfont-sizeプロパティ単位「em」を算出してくれるツールだ。まずベースのフォントサイズをセットして、ターゲットpx相当のem値を知ることができる。CSSのcalc()関数やSassで計算できる環境ならば不要なのだが、改修案件で既存のソースコードに手を加えるときに役立つ。 Polyfill.io https://cdn.polyfill.io/v3/ Polyfill.ioは、JavaScriptのモダンな機能が未実装なブラウザで、擬似的に動作するスクリプトをセレクトして結合できるツールだ。古いブラウザ対応を含む案件かつbabel等のトランスパイルする環境にいないときに役立つ。 HTML Arrows https://www.toptal.com/designers/htmlarrows/ HTML Arrowsは、HTMLの特殊文字リファレンスだ。HTMLエンティティやCSSコードを一覧できる。HTML特殊文字に関しては、このサイトより充実したところも存在するが、Unicode、HEX code、HTML code、HTML entity、CSS codeを一覧できるのは、あまり知らない。なかでもCSS codeの一覧は役立つ。 Flexbox Playground https://demos.scotch.io/visual-guide-to-css3-flexbox-flexbox-playground/demos/ Flexbox Playgroundは、CSSのFlexboxプロパティ値を操作して体感するデモツールだ。サイト名のとおり遊び場だ。たくさん操作すればFlexboxの特性を理解できると思う。Flexboxの理解に役立つ。 まとめ サイトコーディングに役立つWebツールの紹介だった。 ここで紹介したツール以外にも、きっとたくさんの有用なWebツールが存在するだろうし、わたしの知らないツールをあなたが知っていて日常的に使用しているケースも往々にあるだろう。その逆にわたしが日常的に使用していて、あなたが知らないケースもある。だからこのたび共有することにした次第だ。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。

  • yeomanとお別れするときがやってきた!静的Webサイトジェネレーター「Spike」入門

    yeomanとお別れするときがやってきた!静的Webサイトジェネレーター「Spike」入門

    わたしはつい今までyeomanのジェネレーターを用いて静的サイトコーディングに取り組んでいた。yeomanは、cliによる操作ひとつでHTML5 Boilerplateをはじめ、Sass、Bootstrap、Modernizrなどトレンドに富んだ導入環境を構築してくれる。そして環境自体はタスクランナーのGulpであるから作業の自動化が特徴だ。 しかしwebpackが台頭したことでGulpによる環境構築するシーンは圧倒的に激減した。SPAライブラリに代表されるReactやVue、Angularもこぞってwebpackである。まずwebpackはバンドラーと呼ばれるもので、ファイルをガッチャンコしてくれる。そしてGulpはタスクランナーと呼ばれるもので前述したとおり作業自動化してくれる。したがってそもそも役割が違うわけだけれども、webpackは作業自動化も担っていて、Gulpを使うメリットが減ってしまったのだろう。 そんなこんなでwebpackの環境構築は常々検討していたのだけれど、自作のwebpack環境はトレンドやバージョンを考えると気が引けてしまい、それに至ることはなかった。やはりyeomanのようにcliで操作できる容易さがほしかったわけで、webpack製のものを探してはいたのだけれど巡り合うことがなかった。 そしてこのたびyeomanに取って代わるツールを発見したかもしれない。 このエントリーでは、webpack製の静的Webサイトジェネレーター「Spike」を紹介したい。 Spikeについて Spikeは、静的Webサイトジェネレーターだ。yeomanを使ったことがあるならば、そのようなものと捉えてもらうとよいだろう。 【Spike】https://spike.js.org/ 特徴 JavaScriptバンドラーにwebpack HTMLパーサーにReshape CSSパーサーにPostCSS JavaScriptトランスパイルにBabel Spikeに触ってみる それでは、Spikeのインストールと使い方について解説しよう。 インストール Spikeをグローバルにインストールする。Macユーザーは先頭にsudoで試してほしい。 さてインストールが成功したか下記コマンドで確認しよう。 $ spike -v バージョン値が表示されればOKだ。 プロジェクト初期化 Spike環境をジェネレートしてみよう。任意のフォルダで下記コマンドを実行する。 上記コマンド末尾の「my-project」は任意だ。プロジェクト名を適用するとよいだろう。 つづいて、ウィザード形式で進めていく。下記内容が問われる。 果たして、プロジェクト雛形をジェネレートできたならば、つづいてプロジェクトに関わるnodeモジュールをインストールする。cdコマンドでプロジェクトディレクトリに移動したのち、npm installかyarnを実行しよう。 開発開始 開発をスタートさせるときは、下記コマンドを実行する。 するとローカルサーバーが起動して、ブラウザタブにhttp://localhost:1111が開く。 まとめ webpack製の静的Webサイトジェネレーター「Spike」の紹介だった。 まだyeoman使っていたのか、という感想は受け止めなければならない。かなり希少種であることは自覚しているのだけれど、静的コンテンツをコーディングする程度なら、まずまずの使い勝手を誇るのがyeomanだった。 もしわたし以外にもyeomanを使っていて、webpackに乗り換えたい意欲があるならば、よい機会なのではないだろうか。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。

  • React Navigationで特定のスクリーンだけモーダルにするルーティング設定

    React Navigationで特定のスクリーンだけモーダルにするルーティング設定

    ルーティングライブラリ「React Navigation」のcreateStackNavigator()の画面遷移は、iOS,Androidともに標準トランジションが発生する。スクリーンが右からスライドして重なる具合のものだ。 スマホアプリの画面遷移といえばスタンダードなものだが、フェードインで現れるモーダルパターンもある。 これを設定するにはcreateStackNavigator(RouteConfigs, StackNavigatorConfig)のStackNavigatorConfigに該当するオプション設定から行う。 このように画面遷移モードの変更はとても容易い。ところが複数のルーティング中にモーダルスクリーンが混じっていると、ややこしくなる。 このエントリーでは、特定のスクリーンだけモーダルにするルーティング設定を紹介したい。 なにがややこしいか? createStackNavigator(RouteConfigs, StackNavigatorConfig)のルーティング設定は、RouteConfigsに該当するところにオブジェクト形式で定義する。下記の具合に記述する。 const App = createStackNavigator({ Home: HomeScreen, List: ListScreen, Detail: DetailScreen, }); ルーティング名(Key)と該当コンポーネント(Value)が紐づく形だ。HomeスクリーンにListスクリーンが重なり、Detailスクリーンが重なり画面遷移する。いずれの画面遷移もスクリーンが右からスライドして重なる具合のものだ。 ここにモーダル用のスクリーンを加えて、遷移モードを変更してみるとどうなるだろうか。下記の具合にしてみる。 想像できただろうか?そう。すべてがモーダル式に画面遷移してしまうわけだ。 解決するには、 モーダル式になるハブの役割をするcreateStackNavigator()を設ければよい。下記の具合に記述する。 RootNavigator AppNavigator ModalNavigator それぞれ定数に定義したのは可読性を懸念してのことだけれど、いっきに記述することもできる。下記の具合だ。 つまりモーダル式のcreateStackNavigator()に、スライド式のcreateStackNavigator()を内包するような装いになる。これによってHome,List,DetailスクリーンのいずれからもModalスクリーンを開くことができるわけだ。 そしてheaderMode: ‘none’,は、タイトルバーを表示しない旨の指定だ。内包した先のcreateStackNavigator()でタイトルバーを設ける都合上、大枠のタイトルバーを非表示にしないと二重にタイトルバーが出現してしまう。 まとめ 特定のスクリーンだけモーダルにするルーティング設定の紹介だった。 モーダルといえば、UIフレームワークに用意されているものもある。<Modal />のようなものを利用するならば遷移モードを変更しなくてよいのだが、そのモーダルはタイトルバーを覆わない。スクリーンコンポーネントがタイトルバーより下層レイヤーに位置するからと想像できる。結局、ルーティングで解決しなければならないのかもしれない。 このエントリーが、あなたのクリエイティビティを刺激するものであると期待したい。