$30 off During Our Annual Pro Sale. View Details »
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Reactのチュートリアルをしよう2
Search
akatsuki1910
November 21, 2023
0
20
Reactのチュートリアルをしよう2
akatsuki1910
November 21, 2023
Tweet
Share
More Decks by akatsuki1910
See All by akatsuki1910
機械の気持ちを考えてコードを書こう
akatsuki1910
0
5
サーバーを使って遊ぼう
akatsuki1910
0
6
お前、GCってまあ別に気にしなくていいだろって思いながらwebサイト作ってるだろ
akatsuki1910
0
11
業務を効率化させるためのAIツール3選(超実践編)
akatsuki1910
0
32
後輩に伝えたいこと
akatsuki1910
0
19
難解(かもしれない)言語
akatsuki1910
1
38
Reactのチュートリアルをしよう3
akatsuki1910
0
29
クソドメインを取ろう
akatsuki1910
0
54
HTMLとCSSとコンポーネント
akatsuki1910
0
29
Featured
See All Featured
jQuery: Nuts, Bolts and Bling
dougneiner
65
8.3k
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
83
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
508
140k
Building an army of robots
kneath
306
46k
The Language of Interfaces
destraynor
162
25k
職位にかかわらず全員がリーダーシップを発揮するチーム作り / Building a team where everyone can demonstrate leadership regardless of position
madoxten
47
33k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
Odyssey Design
rkendrick25
PRO
0
420
Writing Fast Ruby
sferik
630
62k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
58
Organizational Design Perspectives: An Ontology of Organizational Design Elements
kimpetersen
PRO
0
38
Introduction to Domain-Driven Design and Collaborative software design
baasie
1
500
Transcript
Reactのチュートリアルをしよう2 らり
valueを入れれるようにする valueというpropsを用いて、値が表示されるようにする
クリックできるようにする これにより、「clicked!」が表示されるようになる
クリックして文字が表示されるようにする useStateを用意し、そこに値を入れることでXを表 示させることが出来る
なんでuseStateを使う必要があるの? 画像のようなコードがあったとき、ccの値が増えたとし ても、毎度Boardコンポーネントが再レンダリングされる ため、ccの値は初期化される また、useStateの初期値は初回レンダリング時にのみ 更新されるため、再レンダリングされても値は保持され たままである
なんでuseStateを使う必要があるの? ただ、useStateの初期値にpropsを入れていた場合、 初回時にのみしか反映されないため、propsの値を stateの初期値にしたい場合はuseEffectなどを用いて stateに入れる必要がある そのため、レンダリングされた最初だけ読まれる値だと いうことを知っておく必要がある
useStateの初期値は入れよう useStateの値を入れないと、初期値はundefinedになる これは暗黙的に型もundefinedになり、指定した型と違った結果になる 下の例では、itemはnumber|undefined型になる(ジェネリクスの話) そのため、指定した型の通りのstateを用意するためにも、型を指定したらその型にあっ た初期値を入れておくと、間違えることが少なくなる
stateをBoard側で持つ handleClickを親で持つようにする
stateと配列の話 stateの変化をObject.isで見ているため、同一メモリのオブジェクトの変化には対応でき ない そのため、一度配列やオブジェクトをコピーしてから変更を行うか、非破壊的変更を行う ことでsetする必要がある 左はsetされないが、右はsetされる
Object.is https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Object/is
まるばつゲームっぽくする xIsNextをフラグとして、まるとばつを 繰り返し表示させる
勝ちかを判定する 配列を回して、縦横ななめが 揃えば、それのまるばつを返 す それ以外ならnullを返す
その関数、コンポーネント内にいる? hookに関わらない関数や定数はそもそもコンポーネント内に書く必要がない レンダリング毎に宣言されるため、外に出した方がよかったりする あなたのその定数、コンポーネント内に入れる必要はありますか?
勝敗を表示 calculateWinner関数を用いて、勝敗が確定してい たら、勝敗を表示してまるばつを表示する機能を止 める
useMemo useMemoパフォーマンスの最適化としてのみ使用してください。これがないとコードが機 能しない場合は、根本的な問題を見つけて、まずそれを修正してください。その後、 useMemoパフォーマンスを向上させるために追加することができます => 基本的に使う必要がない https://react.dev/reference/react/useMemo
ただ? 「使わなくていい」とされるのはメモ化をするための意味がない場合が多かったり、使っ た方がパフォーマンスが落ちるからだったりする それは大規模サービスとかに当てはまるものであり、普通に使ってる分には誤差にしか ならないので、使ってなくて取り返しがつかなくなる前に積極的に使ってよい というか可能な限り使っていいって公式が書いてるから素でロジック書かない方がいい https://react.dev/reference/react/useMemo
注意書き 「reactStrictMode」がtrueだと中身が2回実行される そのため、実行されるとバグが発生するから困るからとこのモードをfalseにする人がい るが、そもそもreactは純粋関数で作るべきであるので、バグが発生している時点でロ ジックがおかしいので反省すべき
React.memo useMemoは値に対してだが、React.memoはコンポーネントに対してのメモ化 これも基本的に使う必要がない また、全てにラップすることによるメリットはほぼない むしろメモ化することでよりよくなる場合があるのであれば、それの大半は設計ミスの賜 物なので、コードを見直す必要がある そもそも公式サイトの記述をきちんと読まず、正しく理解できていない状態で使用してい るプログラマーが非常に多い印象があります。 https://ja.react.dev/reference/react/memo
課題 課題1 このままではボタンを押すたびに重い処理が走ります これを可能な限り軽量化を計ってください また、再レンダリングの数も極力抑えてください 答えはuseMemoを使った場合と、React.memoを使った場合を用意してください