-
Notifications
You must be signed in to change notification settings - Fork 0
Learn Frontend
藤川英悟 edited this page Aug 24, 2022
·
3 revisions
-
Layout: レイアウトのためのコンポーネント
Component Description Box ほとんどのCSSユーティリティが必要とするラッパーコンポーネントとして使うことができます。componentプロパティを設定することにより、生成するタグをdivとspanで切り替えることができます Container コンテンツを中央揃えにするコンポーネントで、最も基本となります。流動的コンテナと段階的コンテナの2種類を生成することができます Grid 画面を格子状に分割して、組み合わせることでレイアウト全体に一貫性を持たせているレスポンシブレイアウト。Material Designでは12列のレイアウトに基づく Stack スタックはレイアウトを管理するコンポーネントです。直下の子要素が管理対象。垂直または水平に並べる。子要素同士の間に余白や仕切りをつける Image List イメージリストはグリッド状に整頓された画像を表示するコンポーネント。基本となる全ての画像が同じ大きさで表示されるリストの他、特定の画像を強調して表現することも可能 -
Inputs: 入力のためのコンポーネント
Component | Description |
---|---|
Autocomplete | オートコンプリートはオプション値を選択することのできるコンポーネントで、選択肢をテキストボックスに入力された値で絞り込むことができます。 |
Button | ボタンはユーザが実行できる行動を伝達するためのコンポーネントです。モーダルウィンドウの「閉じる」ボタンやフォームの「送信」ボタンが主な例と言えるでしょう。 |
Button Group | ButtonGroupコンポーネントでは、関係しているボタンをグループ化できます。グループ化するボタンはButtonGroupコンポーネントの直下の子要素である必要があります。 |
Checkbox | チェックボックスは選択肢の中から複数のものを選ぶことができます。 |
Floating Action Button | フローティングアクションボタンとは画面の定位置に表示されるボタンです。通常は円の中にアイコンを用いたデザインが使われ、コンテンツの一番前面に浮かんだように表示されています。 |
Radio button | ラジオボタンは複数の選択肢の中から1つだけ選ぶことができます。 |
Rating | Ratingsはコンテンツの管理者に対してユーザの評価を送るためにあります。管理者の意見や体験したことに対して、ユーザは星の数で自分の評価をつけられます。 |
Select | セレクトコンポーネントはリストの中からユーザが選択した情報を収集するために使われます。ユーザはプルダウンメニューで選択肢を確認し、選択することができます。 |
Slider | スライダーは特定の範囲の中から値を設定するためのコンポーネントです。音量の設定をするときに提供されていることが多いと言えます。 |
Swetch | スイッチはひとつの設定でオンオフの状態を切り替えます。 |
Text field | テキストフィールドはテキストを入力および編集することのできるコンポーネントです。 |
Transfer List | 転送リストは、1つ以上のアイテムをリスト間で移動することのできるコンポーネントです。 |
Toggle Button | トグルボタンは関連するオプションをグループ化できます。グループ化されたオプションは1つだけ選択することが可能なもの、複数のオプションを選択することが可能なものがあります。 |
- Navigation: ナビゲーションに関するコンポーネント
Component | Description |
---|---|
Bottom Navigation | ボタンナビゲーションではアプリの中の主だった項目の間を移動することが可能となります。 |
Bareadcrumbs | 構造化されたWebサイトをユーザが閲覧しているときに、表示されているページの階層を可視化することができます。トップページからどのようにたどり着くことができるか、ナビゲーションを可能にするリンクで構成されています。 |
Drawer | アプリ内の主要なコンテンツへアクセスできるメニュー画面を表示します。特に画面の左右どちらかに固定された、補足コンテンツを含む画面のことをサイドシートと言います。 |
Link | リンクコンポーネントを使うと、テーマカラーと文字デザインのスタイルを使用して簡単にアンカー要素をカスタマイズできます。 |
Menu | メニューを一時的に画面よりも優先して表示します。 |
Pagination | ページネーションコンポーネントを有効にすると、複数あるページの中から特定のページを選択して表示できるようになります。 |
Speed Dial | 画面上に浮いているアクションボタンを押したとき、3~6個の関連するアクションを表示できます。 |
Stepper | ステッパーは番号が付けられたステップを通じて、進行状況を伝えるコンポーネントです。ウィザードのような役目を果たします。 |
Tabs | タブを使用すると簡単に表示したいビューを探して切り替えられます。表示したい情報が載っているタブを選択すると表示される情報が切り替わります。 |
- Surfaces: 任意のコンポーネントを載せるためのコンポーネント
Component | Description |
---|---|
Accordion | アコーディオンコンポーネントはアコーディオンメニューを実装できます。ひとつのページ上にある関係のあるコンテンツをセクションごとに表示したり非表示にしたりする機能で、大きな面でも使うこともでき、軽量であることが特徴です。 |
App Bar | その時点で表示されている画面に関しての情報をまとめて表示します。画面上部に設置されたAppBarは、多くの場合タイトルを表示したりナビゲーションバーとして、もしくは実行できる情報をまとめるために使われます。 |
Card | カードはひとつのコンテンツと関係する動きや情報をまとめて表示できます。関連している情報を読み込むことができる必要があります。 |
Paper | 紙のような質感をアプリケーションの背景に表現します。リサイズしたり、シャッフルしたり、複数の紙を扱っているかのように表示することができます。 |
- Feedback: フィードバックのためのコンポーネント
Component | Description |
---|---|
Alert | アラートはユーザの作業を中断することなく、注意を引く方法で重要な短いメッセージを表示します。 |
Backdrop | 特定の要素もしくはその一部を強調するために使用されます。アプリケーションの状態が変化していることをユーザに示したり、ローダーやダイアログの作成にも使われています。 |
Dialogs | 作業に対しての重要な情報を含めて通知したり重要な決定を促したりします。ダイアログはモーダルウィンドウの形でアプリケーションの表面に表示されます。 |
Progress | プログレスインジケーターは一般的に待機時間の特定できない場合は回転するオブジェクトを表示したり、プロセスの長さを表示したりします。 |
Skeleton | データが読み込まれる前に仮のコンテンツ領域を確保して表示し、見ているユーザが不満を持ってしまうのを軽減します。 |
Snackbar | 一時的に画面に簡単な通知を行います。このコンポーネントはトースト通知として知られています。 |
- Data Display: データ表示のためのコンポーネント
Component | Description |
---|---|
Avatar | テーブルやダイアログメニューまであらゆる用途に使用されます。顔写真や名前、アイコンなどが設定でき、主な用途としてはアプリケーションへのログイン状態を表示するのにつかわれます。 |
Badge | バッジは子要素の右上に小さな通知を表示します。例えばメールやメッセージが何通来ているかを表示できます。 |
Chip | Chipsは入力、属性または何らかの実行ができることを表すコンパクトな要素です。ブログ記事につけられたタグを表示したり、特定の要素を押してタグを絞り込んで記事を表示したりすることができます。 |
Divider | Dividerはリストとレイアウトをグループ化する細い線を表示します。 |
Icons | Material-UIはアイコンについて、以下の3つの方法をサポートしています。1.標準の Material Design iconsを、Reactコンポーネント(SVGアイコン)として、エクスポートする方法2.ReactラッパーのカスタムSVGアイコンとして、SVGアイコン コンポーネントを利用する方法3.Reactラッパーのカスタムフォントアイコンとして、アイコン コンポーネントを利用する方法 |
Material Icons | 公式のWebサイトからすぐに使うことができる1700以上のReact Materialアイコンが提供されています。 |
List | リストはテキストや画像を一覧表示するもので、垂直方向に連続して表示されます。 |
Table | テーブルにはデータセットを表示させることができます。Cardなどの他のコンテンツを埋め込んでカスタマイズすることができます。 |
Tooltip | Tooltipはユーザが要素にカーソルを合わせたり、フォーカスしたり、タップしたりすると、その要素をクリックしたときに実行される機能が分かりやすく記載されたテキストを表示します。 |
Typography | Typographyを使うことでデザインとコンテンツを明確かつ効果的に表すことができます。 |
- Utils: 各種の便利なコンポーネント
Component | Description |
---|---|
Clik Awal Listener | 要素がクリックされたかどうかを検出するリスナーです。表示されているドキュメントの任意の個所で発生するクリックイベントを検出します |
CSS Baseline | HTMLの要素と属性のスタイルをそろえるコレクションであるnormalize.cssのような役割を果たします。 |
Modal | モーダルウィンドウを表示するコンポーネントです。ダイアログ、ポップオーバー、ライトボックスなどの作成するための基礎的な機能を提供します。 |
No SSR | サーバサイドレンダリングの対象から意図的にコンポーネントを外すために使用されます。 |
Popover | Popoverを使うことで、一部のコンテンツを別のコンテンツ上に表示させることができます。 |
Popper | Popperも、使用することで一部のコンテンツを別のコンテンツ上に表示することができます。react-popperの代替手段です。 |
Portal | portalコンポーネントは子要素をDOMの階層の外側にある新しいサブツリーにレンダリングします。 |
Textarea Autosize | テキストエリアを表示するReactのコンポーネントです。デフォルトでは自由にサイズを変更することができますが、サイズや行数を固定することも可能となっています。 |
Transitions | TransitionはUIを簡単に表現する手助けをします。 |
useMediaQuery | ReactのCSSメディアクエリフックです。CSSのメディアクエリとクエリが一致するかどうかに基づいてコンポーネントをレンダリングします。 |
-
ライブラリ
- Emotion CSS
- Tailwind CSS
- Plain CSS
-
設計
- CSS in JS
- Emotion
- StyledComponent
- CSSプリプロセッサ
- Stylus
- Sass
- CSS in JS
-
プロトコル
- GraphQL
- RESTful
- gRPC
- Websockets
-
サービス
- Auth0
- GraphCMS
- GoogleAnalytics
- SmartContracts
-
React.useContext
- 「部分再描画頻度」が低いアプリケーションに最適
- サーバーサイドから得られた値を表示するだけ、という場合は特に効果が高い
- そもそもSPAサイトでグローバル状態管理が前提として発生しない場合の、緊急対処法としても有効(※妥協)
-
React-Redux(後述)
- 広く利用されるReduxフレームワークのReact版。最近はReact Hooksの台頭により棲み分けが進む(衰退..?)
- 大規模なアプリケーションに適しているとの声。
- 一連の概念を把握するのに一定の壁がある。Action,Dispatcher,Store(Reducer/State)。
- redux-saga
- redux-saga は Redux ミドルウェアとして実装されているため、スレッドはメインアプリケーションからのアクションに応じて起動、一時停止、中断が可能
- 副作用を個別に実行する独立したスレッドのような動作イメージ
- 副作用というのは
- データ通信などの非同期処理
- ブラウザキャッシュへのアクセス
- のようなピュアではない処理
- なぜ必要?
- easier to manage
- more efficient to execute
- easy to test
- and better at handling failures
- 副作用というのは
- 副作用を個別に実行する独立したスレッドのような動作イメージ
- redux-saga は Redux ミドルウェアとして実装されているため、スレッドはメインアプリケーションからのアクションに応じて起動、一時停止、中断が可能
- redux-saga
- 一連の概念を把握するのに一定の壁がある。Action,Dispatcher,Store(Reducer/State)。
-
Recoil(Facebook製のReact状態管理ライブラリ)
- 実験段階の、状態管理ライブラリ。一応、RecoilはReact公式。
- モチベーション https://recoiljs.org/docs/introduction/motivation
- Reactに搭載されるのstateおよびcontextの課題解決
- Component state can only be shared by pushing it up to the common ancestor(共通の祖先にプッシュすることによってのみ共有できます)
- but this might include a huge tree that then needs to re-render.
- not an indefinite set of values each with its own consumers
- 不定値の集合とは?
- 変数に値が代入なければ, 当然その変数にどのような値が入っているかわからない
- difficult to code-split the top of the tree (where the state has to live) from the leaves of the tree
- 枝葉の要素がstateを使用してる場合上位層のコードを分割しづらい
- difficult to code-split the top of the tree (where the state has to live) from the leaves of the tree
- 変数に値が代入なければ, 当然その変数にどのような値が入っているかわからない
- Component state can only be shared by pushing it up to the common ancestor(共通の祖先にプッシュすることによってのみ共有できます)
- Reactに搭載されるのstateおよびcontextの課題解決
- モチベーション https://recoiljs.org/docs/introduction/motivation
- 実験段階の、状態管理ライブラリ。一応、RecoilはReact公式。
-
MobX - https://mobx.js.org/README.html
- principle that the most commonly used concepts are introduced before specialized information. This applies to the headings in the table of concepts as well as the pages under those headings.
- Observable state
- Actions
- Computeds
- Reactions
- principle that the most commonly used concepts are introduced before specialized information. This applies to the headings in the table of concepts as well as the pages under those headings.
-
jotai - https://jotai.org/
- Jotai takes a bottom-up approach to React state management with an atomic model inspired by Recoil
-
Read要件
- 「Read要件」の多いアプリケーションイメージ
- ニュースサイトなどのメディア媒体
- 画面単位で責務が切り替わるショッピングサイト
- 技術ブログなど
- 「Read要件」の多いアプリケーションイメージ
-
Write要件
- 「Write要件」の多いアプリケーションイメージ
- SaaS のダッシュボード
- ユーザー編集の伴うアプリケーション
- 社内インナーツール
- 「Write要件」の多いアプリケーションイメージ
-
アプリケーション特性の確認
- 部分再描画頻度
- Redux設計のコツを理解する
- Redux Fundamentals - how Redux works - https://redux.js.org/tutorials/fundamentals/part-1-overview
- Part1: Minimal Redux Example
-
Point
-
reducer
function- The reducer receives two arguments
-
current state
- with initialState as the default value.
- When the Redux app starts up, we don't have any state yet
- so we provide the initialState as the default value for this reducer
- When the Redux app starts up, we don't have any state yet
- with initialState as the default value.
-
action
object- describing what happened.
-
- The reducer receives two arguments
-
-
Prerequirements
- Familiarity with HTML & CSS.
- Familiarity with ES6 syntax and features
- Understanding of the array and object spread operators
- Knowledge of React terminology: JSX, State, Function Components, Props, and Hooks
- Knowledge of asynchronous JavaScript and making AJAX requests
- React DevTools Extension for Chrome https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi/related?hl=en
- Redux DevTools Extension for Chrome https://chrome.google.com/webstore/detail/redux-devtools/lmhkpmbekcpmknklioeibfkpmmfibljd/related?hl=en
-
- Part2: Redux Concept DataFlow
- Part3: State, Actions, and Reducers
- Redux Toolkit to simplify things
- Part1: Minimal Redux Example
- Redux公式が紹介している設計方針・他のサービスではどのように設計しているのか- https://blog.recruit.co.jp/rls/2019-12-20-dissecting-redux-store/
- Storeの設計変更は影響範囲が大きく難しいため、Storeの設計は重要
- Redux公式が紹介している設計方針(Recipes)
- 以下のような3つのdataを作るのが基本 https://redux.js.org/usage/
- Domain data
- アプリケーションが表示したり変更したりするデータ
- e.g. TODOアプリなら、todo/doing/done
- App state
- アプリケーション独自の振る舞いのためのデータ
- e.g. データの選択状態やデータフェッチのローディング状態
- UI state
- 現在の表示方法のためのデータ
- e.g. モーダルが開かれているかどうか
- 他のサービスではどのように設計しているのか
- 有名なWebサービスの中からReduxを使っているサービスを探してStoreの中を調べる
- Storeの設計変更は影響範囲が大きく難しいため、Storeの設計は重要
- reduxのstate設計の話
- 個人的な関心
- store/reducerの関数命名
- stateの粒度・単位
- スタンダードなディレクトリ構成
- Redux Fundamentals - how Redux works - https://redux.js.org/tutorials/fundamentals/part-1-overview
-
The UI should consist of three main sections:
- An input box to let the user type in the text of a new todo item
- A list of all the existing todo items
- A footer section that shows the number of non-completed todos, and shows filtering options
-
Todo list items should have
- a checkbox that toggles their "completed" status.
- be able to add a color-coded category tag for a predefined list of colors.
- be able to delete todo items.
-
The counter should pluralize the number of active todos: "0 items", "1 item", "3 items", etc
-
There should be buttons
- to mark all todos as completed, and
- to clear all completed todos by removing them
-
There should be two ways to filter the displayed todos in the list:
- Filtering based on showing
- "All", "Active", and "Completed" todos
- Filtering based on selecting
- one or more colors, and showing any todos whose tag that match those colors
- Filtering based on showing
-
- Features - 特徴: A: これまでできなかったことができるようになった。 / B: 同じことをより良くできるようになった。 / C: 今よりもできることが減った。
- Stability - 安定性 A: バグが少なく、デバッグや開発が容易になった。 / B: ソフトウェアの安定性には影響しなかった。 / C: 導入したことによってバグが増えた。
- Performance - パフォーマンス・処理性能 A: 軽量、読み込みが軽い、パフォーマンスが向上した。 / B: パフォーマンスには影響しなかった。 / C: 導入したことによって遅くなった。
- Package Ecosystem - 周辺エコシステム A: ライブラリの問題点を解消する明確な解決策が存在し、よく文書化されている。 / B: ライブラリの問題点を解消する多くの解決策が乱立している、あるいは最近出始めた。 / C: パッケージエコシステムが存在しない。自作が必要。
- Community - ライブラリの開発・運営を支えるコミュニティ A: フォーラムやチャットの発言が毎日ある、GitHubのIssueが一日以内に対処される、Stack Overflowで質問にたくさん回答が付いている。 / B: フォーラムやチャットで時々反応がある。 / C: GitHub以外にコミュニティがない。
- Learning Curve - 学習コストラーニングカーブ A: 1日でコーディングを始めることができる。 / B: ものにするまでに一週間程度必要。 / C: 基礎を学ぶのに一週間以上かかる。
- Documentation - ドキュメンテーション A: ドキュメントサイト、スクリーンキャスト、サンプルプロジェクト、チュートリアル、APIドキュメントが完備されている。 / B: ReadmeとAPIドキュメントが用意されている。 / C: ライブラリの使い方を知るための唯一の方法は、そのコードを読むこと。
- Tooling - 整備された開発ツール A: ブラウザ拡張、エディタの対応、CLIユーティリティ、SaaSのうち二つ以上が存在する。 / B: 上記のいずれか一つが存在する。 / C: なにもない。
- Track Record - 実績 A: 4年以上生き残っている、大手企業や有名な開発者の導入実績がある。 / B: 1~4年の歴史がある、アーリーアダプタや中小企業の導入実績がある。 / C: 歴史が1年未満である、導入実績がない。
- Team - 開発者の組織・体制。そのライブラリの背後に誰がいるか A: 専門のオープンソースチームを持つ大手企業が開発している。 / B: 実績のある個人エンジニアの中規模チームが開発している。 / C: 個人で開発している。
- Compatibility - 互換性 A: アップデートは基本的に互換性があり、非推奨項目は警告を行い、互換性のない旧バージョンも最低2年は保守される。 / B: 互換性のないアップデートはあるが、移行ガイドが整備され、徐々に展開される。 / C: 互換性のないアップデートが頻繁にあり、適切なガイダンスがない。
- Momentum - 勢い A: 戦闘力9000以上だと…!?1 Hacker Newsで取り上げられ、GitHubで数千の☆がつき、カンファレンスでよく話題に出たりする。 B: アーリーアダプタが食いつく、GitHubで数百の☆がつく。 C: 一人でひっそりと開発している。いつか見返してやる!いつの日か!
-
個人の感想・評価軸イメージ
- Price/License
- 利用料金
- ライセンス
- パッケージサイズ
- 処理速度
- メンテナンス頻度
- 利用プロダクト数
- Price/License