Open7
reactキャッチアップ時のメモ
数カ月後に業務でReact.jsを使う機会がありそうなので、とりあえずチュートリアルを改めてやった。
昔は英語しかなかった気がするけど今はちゃんと日本語化されてる。
頭の中でVue.jsでの動きと対比しながらやった。
リアクティブにstateを反応させるためにthis.setState
と使わないと行けない辺りは注意が必要かも?
Vue.jsでリアクティブに動作させるための感覚は掴んでたけど注意が必要だ
とりあえずVue.jsのときにもやったのでドキュメント全部読む
Main Concepts
1.Hello World
2.JSXの導入
- 埋め込みは
{}
- HTMLの属性はcamelCaseで書く
-
""
で囲んだら文字列扱い
3.要素のレンダー
React.render()
4.コンポーネントとprops
- 基本理念はvueと同じ
5.stateとライフサイクル
-
setState
で変更しないとリアクティブにならない-
state
とprops
を使いたい場合ははsetState((state, props) => {})
で
-
-
componentDidMount
,componentWillUnmount
-
react
もデータは下方向に伝わる。どうせイベントは下から上なんだろう
6.イベント処理
-
this
の扱いは注意が必要 - vueの
@click.prevent
に相当するのは普通にイベントハンドラ内でe.preventDefault()
してあげる
7.条件付きレンダー
-
render
がnull
を返す場合はコンポーネントは描画されない
8.リストとkey
-
key
の考え方はvueと同じ
9.フォーム
-
v-model
みたいな便利なものはなくて、きちっとvalue
とonChange
でハンドリングする
10.stateのリフトアップ
- vueでいうとこの
$emit
でイベントアップみたいな感じではなく、イベントハンドラを親から渡す形式っぽい - ステートをどこで保持するかとかの考え方はvueと同じ
11.コンポジション vs 継承
- vueでいうとこの
slot
- 親から差し込まれた子要素は
props.children
で取り出す
12.React の流儀
- 自分で色々実装してみた。vueでいうとこの
computed
は普通にクラスにgetter
を定義すれば良さそう
Advances Guides
アクセシビリティ
ここは意識するときが来たらちゃんと見るでいいかな
コード分割
- 動的インポートの話と、その時のコンポーネントの取り回し
- vueではNuxt.jsで暗黙的にルーティングのレイヤーでやっていたので、react or Next.jsでも同じような考え方でやる感じになると思った
コンテクスト
- vueでいうとこの
this.$router
とかでコンポーネント間で共有できるグローバルなアレを作るとこ- vueと同じくpropsのバケツリレーを避けたりするために使ってはいけない
React.createContext()
- vueと違って暗黙的に全部差し込まれて使える状態までにはならないので、
static contextType = MyContext;
する
Error Boundary
- React16から追加
- コンポーネント版の
catch{}
みたいなやつ- 普通コンポーネントの描画壊れると全部巻き込んで死ぬけど、
<ErrorBoundary>
のとこで捕まえてフォールバックして別コンポーネント描画したりできる- 知らないけどNext.jsではいい感じにルーティングのレイヤーとかでラップしてそう
- 普通コンポーネントの描画壊れると全部巻き込んで死ぬけど、
- 非同期処理とかのエラーはキャッチできないので注意
Ref と DOM,refのフォワーディング
- 生のDOMを触らなければ行けない時が来たら読む
フラグメント
-
<React.Fragment>
- 短縮記法で、単純に
<>
でも良いらしい
- 短縮記法で、単純に
- vueで言うところの
<template>
かな - keyつけなきゃいけないので注意
高階 (Higher-Order) コンポーネント
- いい具合にラップして共通化すると良いよという話
他のライブラリとのインテグレーション
- jQueryとか他のライブラリで作っているとこに対して混ぜるときが来たらちゃんと読む
JSX を深く理解する
パフォーマンス最適化
- 長いリストの仮想化
- これ大事そうなので覚えておく
- vueでは意識したことなかったな
ポータル
- ダイアログとか自前で作るときに見る
プロファイラ API
- パフォーマンスとか調査するときに使う
ES6 なしで React を使う
- そのシチュエーションがきたら見る
JSX なしで React を使う
- そのシチュエーションがきたら見る
差分検出処理
Ref と DOM
- DOMに直接アクセスする時が来たら見る
レンダープロップ
- なるほどという感じ
静的型チェック
- Flowは使わないと思うので一旦無視
- TypeScriptのとこだけ読んだ
- vue-typescript-xxxとかnuxt-typecript-xxxみたいなライブラリを入れなくて良いのはイイネ
strictモード
- 開発時は入れておくと良さそう
PropTypes を用いた型チェック
- vueにもあった仕組みではある
- TypeScriptを使うので頭の片隅においておく程度で良いはず
非制御コンポーネント
- FormとかでDOMの仕組みそのまま使いたいときとかの説明
-
<input type="file" />
とかでは常に使うっぽい
Web Components
- まあ今は意識しなくていい
HOOKS
フックの導入
フック早わかり
- classでのstateの扱いがとても面倒そうだったのでこれはすっごい便利そう
ステートフックの利用法
副作用フックの利用法
フックのルール
独自フックの作成
一通り見たのでなんかお試しで作ってみる