【読書メモ】React Cookbook(英語版)を読んで
category
date
Jun 28, 2022
slug
report-react-cookbook
status
Published
summary
React Cookbook(英語版)をサクッと読んでみた際のメモ書き
type
Post
![notion image](https://www.notion.so/image/https%3A%2F%2Fm.media-amazon.com%2Fimages%2FI%2F518tl1yg9FL.jpg?table=block&id=5903a1a1-45e6-4adb-bc2f-5ff7c1a9be0d&cache=v2)
書籍リンク
どんな本か気になっている人向けのざっくり内容まとめです。
本の概要
React Cookbookは、よく使う実践的なコードを集めたレシピ本のような書籍です。
各テーマのサンプルコードが「Problem」ベースで書かれており、例えばGatsbyの章では、create-react-appではブログやECサイトのような複雑なコンテンツを効率的に表示するのに適していない、というProblemが最初に書かれていて、その後にGatsbyというソリューションがありますよ、という説明とそのサンプルコードの解説があり、最後にDiscussionというまとめがある、みたいな構成になっています。こんな感じでproblem / solution / サンプルコード / discussionのセットが80以上載っている本です。
- 7章に別れている
- アプリケーションの作成
- Routing react-router-dom
- State管理 reducer
- Interaction Design reducerとかanimation
- サービスとの接続 これはAPIとの接続部分で、GraphQLも
- コンポーネントライブラリ material-ui semantic-ui
- セキュリティ react-router-domでセキュアなrouteを作ったりとかカスタムでトークン認証するとか
- テスト Cypress Selenium
- アクセシビリティ
- パフォーマンス React Profileとかを使ったパフォーマンス計測
- PWA
- 内容の例(気になった部分)
- nwb
- 複数のプロジェクトで共有するコンポーネントをサクッと作成したい
nwb new react-component component-name
で共通コンポーネントが作れる- Cypress
- 実際のブラウザテストはコストがかかり管理が大変
“describe('screenshot', () => {
it('should be able to take a screenshot', () => {
cy.visit('/');
cy.screenshot('frontpage');
});
});”
- https://qiita.com/takeshisakuma/items/67578529789939c900ff
- cssのtransitionをグループ化して実行できる
- 簡単なtransitionが提供されていて、JSXでラップするだけで完結する
- reducerを使ったundo機能
- undoHistoryを配列のstateで持つだけ
- https://gist.github.com/johanquiroga/cbbfc0da2e9f11d2dbfd15acc4db6fc0
- redux/reselectの機能
- 計算に利用するセレクタを指定し、それが更新された時だけ新しい値を返す(変更がなければキャッシュを使う)
- setStateVersionでカウントしていく
- setStateVersion((v) => v + 1)
- これを副作用に入れる
![notion image](https://www.notion.so/image/https%3A%2F%2Ffile.notion.so%2Ff%2Ff%2Fb91656aa-6c67-46dc-bdc5-db684d87f82c%2Fa442bcb7-363c-45fe-b26d-fc5374c32bac%2F%25E3%2582%25B9%25E3%2582%25AF%25E3%2583%25AA%25E3%2583%25BC%25E3%2583%25B3%25E3%2582%25B7%25E3%2583%25A7%25E3%2583%2583%25E3%2583%2588_2021-09-18_17.57.28.png%3Fid%3De3a72fef-963f-482e-9c6f-a8e64fbdaafd%26table%3Dblock%26spaceId%3Db91656aa-6c67-46dc-bdc5-db684d87f82c%26expirationTimestamp%3D1722146400000%26signature%3DJlVE_nvDpHsiUPUljSDh4jFESX8E5rpBCtu2kAyUnN4?table=block&id=e3a72fef-963f-482e-9c6f-a8e64fbdaafd&cache=v2)
- Profiler(パフォーマンストラッキング)
<Profiler id="Navigation" onRender={callback}>
<Navigation {...props} />
</Profiler>