文学作品「檸檬」をReactで読む
by
Matsuo Obu
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
by mqtsuo02 2019-07-03 React LT会 @Informetis 文学作品「 檸檬 」を React で読む
Slide 2
Slide 2 text
自己紹介 - フリーランスのWebエンジニア - 仕事も個人制作もReact - 趣味を聞かれると何を話していいか分からない - Emotionにはまっている
Slide 3
Slide 3 text
最近のはなし Reactでゲームを作りたくなった
Slide 4
Slide 4 text
何故Reactで? いつも使わないAPIとかの勉強になりそうだから
Slide 5
Slide 5 text
何故Reactで? ドヤれそうだから
Slide 6
Slide 6 text
手始めに メッセージボックス実装してみた
Slide 7
Slide 7 text
作ったもの mqtsuo02 / lemon-with-react
Slide 8
Slide 8 text
仕様的なもの mqtsuo02 / lemon-with-react - 文字が流れる - 全文表示後に ▼ が点滅する - クリックすると次の文章が表示される - 途中でクリックすると全文表示される
Slide 9
Slide 9 text
当初の構想 stateに文字ぶちこんでいけばいいか …...
Slide 10
Slide 10 text
当初の構想 stateに文字ぶちこんでいけばいいか …... ↓ 再描画が走りまくってやばい ( ピカピカする )
Slide 11
Slide 11 text
新たな構想 Reactに内緒でやろう
Slide 12
Slide 12 text
新たな構想 - 流れる文字はstateではなく、インスタンスのプロパティでもつ - setTimeout()で再帰的に文字を結合していく - refを取得して、innerTextで文字を直接DOMにぶちこむ いかにReactに気づかれずにやるかがキモ
Slide 13
Slide 13 text
実装 メッセージの初期化 InitializeMessage() { this.messageChars = this.props.message.split(""); this.charCount = 0; this.message = ""; }
Slide 14
Slide 14 text
実装 再帰的な文字結合 streamMessage() { setTimeout(() => { this.message += this.messageChars[this.charCount]; this.charCount++; this.messageRef.current.innerText = this.message; this.streamMessage(); }, 50); }
Slide 15
Slide 15 text
結果 stateがいない世界観
Slide 16
Slide 16 text
その他の実装 shouldComponentUpdateを実装して 再描画をブロック shouldComponentUpdate(nextProps) { return nextProps.message === this.props.message ? false : true; }
Slide 17
Slide 17 text
その他の実装 点滅する▼はEmotionでアニメーションを実装 const blink = keyframes` 0% {...} 50% {...} 100% {...} `; const nextStyle = css` animation: 1s linear infinite ${blink}; `; const NextSymbol = () =>
▼
;
Slide 18
Slide 18 text
その他の実装 テキストのフォーマットと配列化 const formatText = text => text.replace(/\r?\n/g, "").replace(/ /g, ""); const splitText = text => text .replace(/。/g, "。,") .replace(/」/g, "」,") .split(",");
Slide 19
Slide 19 text
気になる方は mqtsuo02 / lemon-with-react ぜひぜひチェックしてみてください
Slide 20
Slide 20 text
普段Reactでやらないようなことするのは楽しい 再描画まわりに詳しくなった ゲーム完成したら遊んでください このLTで伝えたかったこと Reactのお仕事おまちしてます!
Slide 21
Slide 21 text
E N D