Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
誰でもわかる!React入門
Search
azurata
November 24, 2022
Technology
180
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
誰でもわかる!React入門
先輩に「わかった気になれた」と評されたLTです。
azurata
November 24, 2022
More Decks by azurata
See All by azurata
この夏始めたい 「TOPPERS/ASP3」
azurata09
0
62
SPAJAM2022
azurata09
0
130
etrobo2022 Shiokara-z Model
azurata09
0
1.1k
SuggIt!
azurata09
0
110
この前出たハッカソンでVue.jsを使った話
azurata09
1
310
Other Decks in Technology
See All in Technology
生成 AI × MCP で切り拓く次世代 SRE!自律型運用への挑戦と開発者体験の進化
_awache
0
170
AIを「創る」と「使う」の循環 — HRテックが実践するリアルなAI組織実装
taketo957
0
1.7k
価格.comをAI駆動で全面刷新する ー 30年分の技術的負債を返し、次の30年の土台をつくる ー / AI Engineering Summit Tokyo 2026
tkyowa
50
56k
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
2.9k
Oracle AI Database@Google Cloud:サービス概要のご紹介
oracle4engineer
PRO
6
1.5k
「速く作る」から「正しく作る」へ ─ 生成AI時代の開発フロー改革の ロードマップと実行 ─
starfish719
0
8.6k
Microsoft Build Keynoteふりかえり
tomokusaba
0
110
AIにフローを作らせようとして挫折した話
hamatsutaichi
0
220
React、まだ楽しくて草
uhyo
7
4.2k
美味しいスイスチーズを作ろう🧀🐭
taigamikami
1
260
EventBridge Connection
_kensh
5
650
Dario Amodi『Policy on the AI Exponential』を理解する
nagatsu
0
200
Featured
See All Featured
The Power of CSS Pseudo Elements
geoffreycrofte
82
6.3k
Writing Fast Ruby
sferik
630
63k
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
YesSQL, Process and Tooling at Scale
rocio
174
15k
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
190
Avoiding the “Bad Training, Faster” Trap in the Age of AI
tmiket
0
170
Mind Mapping
helmedeiros
PRO
1
240
Unsuck your backbone
ammeep
672
58k
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
380
Lessons Learnt from Crawling 1000+ Websites
charlesmeaden
PRO
1
1.3k
Statistics for Hackers
jakevdp
799
230k
Future Trends and Review - Lecture 12 - Web Technologies (1019888BNR)
signer
PRO
0
3.6k
Transcript
୭ͰΘ͔Δʂ Reactೖ ʙReactͱ͍͏ΑΓϞμϯϑϩϯτͷͬΆ͘ͳͬͪΌͬͨʙ ͋ͣΒͨ (@azurata09_)
લఏࣝ • HTML͕ॻ͚Δ • JSॻ͚Δͱͳ͓ྑ͠
Ϟμϯϑϩϯτ ಋೖฤ
JSΛͬͯHTMLΛॻ͖ସ͑ͯΈΔ <h1>Hello, HTML!</h1> <script> const h1_element = document.getElementsByTagName("h1")[0] h1_element.innerHTML =
"Hello, JS!" </script>
DOM͔Βh1λάͷཁૉΛͱ͖ͬͯͯ <h1>Hello, HTML!</h1> <script> const h1_element = document.getElementsByTagName("h1")[0] h1_element.innerHTML =
"Hello, JS!" </script>
தΛॻ͖ସ͑Δ <h1>Hello, HTML!</h1> <script> const h1_element = document.getElementsByTagName("h1")[0] h1_element.innerHTML =
"Hello, JS!" </script>
·ͩΘ͔Δ
ͪΐͬͱ༰૿ͯ͠ΈΔ <div> <input type="text" value=“hello!”> <p></p> <p></p> </div> <script> const
input = document.getElementsByTagName("input")[0] const p1 = document.getElementsByTagName("p")[0] const p2 = document.getElementsByTagName("p")[1] function inputHandler() { p1.innerHTML = input.value p2.innerHTML = input.value.toUpperCase() } input.addEventListener("input", inputHandler) inputHandler() </script>
DOM͔ΒͦΕͧΕཁૉΛ͖࣋ͬͯͯ <div> <input type="text" value=“hello!”> <p></p> <p></p> </div> <script> const
input = document.getElementsByTagName("input")[0] const p1 = document.getElementsByTagName("p")[0] const p2 = document.getElementsByTagName("p")[1] function inputHandler() { p1.innerHTML = input.value p2.innerHTML = input.value.toUpperCase() } input.addEventListener("input", inputHandler) inputHandler() </script>
Πϕϯτϋϯυϥ࡞Δ <div> <input type="text" value=“hello!”> <p></p> <p></p> </div> <script> const
input = document.getElementsByTagName("input")[0] const p1 = document.getElementsByTagName("p")[0] const p2 = document.getElementsByTagName("p")[1] function inputHandler() { p1.innerHTML = input.value p2.innerHTML = input.value.toUpperCase() } input.addEventListener("input", inputHandler) inputHandler() </script>
ΪϦΘ͔Δ
Ͱ͜Ε͕Կඦߦʹ͍ͬͯΔͱ…
Vanilla JSͷ • දࣔ(HTML)ͱϩδοΫ(JS)͕ผͷॴʹ͋Δ • ϩδοΫ໋͕ྩతͰHTMLͱ૬ޓʹඥ͔ͳ͍ • (HTMLΛ͔·͢ͱ)༰ͷ࠶ར༻͕؆୯ʹͰ͖ͳ͍
વੜ͡Δ͓ؾ࣋ͪ • HTMLڬΉͱ໘͔ͩΒJS͚ͩͰϑϩϯτΓ͍ͨʂ
͍ͩͿલʹΓ߹͍͕LTͯͨ͠
༰ཁ • JS͚ͩͰWebαΠτ ࡞Γ·ͨ͠ʂ
։͍ͯΈΔ • https://ryu1-1uyr.github.io/html_oasobi/ phase_6.html • https://github.com/ryu1-1uyr/html_oasobi/blob/ master/phase_6.html
ίʔυΛݟΔͱ… 100ߦҎ্ͷίʔυͰ ࣮͞ΕͯΔ
Ͱ… • ͋ͳͨ͜ΕΛ࣮͍ͨ͠ͱࢥ͍·͔͢ʁ • ݏͰ͢
HTMLͷ͍͍ͱ͜Ζ • ߏͳͷͰߏ͕Θ͔Γ͍͢ • DOMͰݕࡧ • ίʔυ͚ͩͰݟ͕ͨ૾Ͱ͖Δ
ڪΒ͘։ൃऀ͜͏ߟ͑ͨ • Ͳ͏ʹ͔දࣔͱϩδοΫΛҰॹʹͰ͖ͳ͍ͩΖ͏͔ • ͋ΘΑ͘࠶ར༻Մೳʹ͍ͨ͠…
ڪΒ͘։ൃऀ͜͏ߟ͑ͨ • Ͳ͏ʹ͔දࣔͱϩδοΫΛҰॹʹͰ͖ͳ͍ͩΖ͏͔ • ͋ΘΑ͘࠶ར༻Մೳʹ͍ͨ͠… 㱺 ϝλϓϩάϥϛϯάͰղܾ͢Δ
ReactͰ։ൃऀ͕Δ͜ͱ • ίϯϙʔωϯτͱ͍͏୯ҐͰϓϩάϥϜΛॻ͘ • ίϯϙʔωϯτΛΈ߹Θͤͯίϯϙʔωϯτ Λ࡞Ͱ͖Δ • ίϯϙʔωϯτΛΈ߹ΘͤΔ͜ͱͰDOMಉ༷ͷ ""Λ࡞͢Δ
React͕ͬͯ͘ΕΔ͜ͱ • ίϯϙʔωϯτΛಡΈࠐΜͰHTML+JSʹॻ͖ى͜͢ • ͭ·ΓʮϓϩάϥϜͰϓϩάϥϜΛੜ͢Δʯ • ͜Ε͕ϝλϓϩάϥϛϯά
͔ͩΒReactެࣜνϡʔτϦΞϧͰ ͜Μͳίʔυ͕ग़Δ return React.createElement('div', {className: 'shopping-list'}, React.createElement('h1', /* ...
h1 children ... */), React.createElement('ul', /* ... ul children ... */) );
Reactೖฤ
Reactͷجຊ • ؔΦϒδΣΫτͰίϯϙʔωϯτΛهड़͍ͯ͘͠ • ؔίϯϙʔωϯτͱ͍͏
جຊܗ import React from "react" function App() { return( <>
<h1>Hello, React!</h1> </> ) } export default App
ΞϩʔؔͰఆٛͨ͠ํ͕ݎ࿚ (constʹ͢Δ͜ͱͰॻ͖͑ΒΕͳ͘ͳΔ) import React from "react" const App = ()
=> { return( <> <h1>Hello, React!</h1> </> ) } export default App
TSͳΒܕ໌ࣔ (͜Εͳͯ͘ಈ͔͘) import React from "react" const App = ():
JSX.Element => { return( <> <h1>Hello, React!</h1> </> ) } export default App
ଞͷίϯϙʔωϯτͬͯΈΔ import React from "react" import { OtherComponent } from
"./OtherComponent.jsx" const App = (): JSX.Element => { return( <> <h1>Hello, React!</h1> <OtherComponent /> </> ) } export default App
React Hooksͱʁ • ؔίϯϙʔωϯτ୯ମͩͱͰ͖Δ͜ͱ͕গͳ͍ • ࠷ॳදࣔʹؔ͢Δ͜ͱ͔͠ॻ͚ͳ͔ͬͨ • ΫϥείϯϙʔωϯτͷػೳΛؔίϯϙʔωϯτ Ͱهड़Ͱ͖ΔΑ͏ʹͨ͠ͷ͕React Hooks
Hooksͬͯ200छྨ ͋ΜͶΜ(ͳ͍) ͳΜ͔͍ͬͺ͍͋Δ ͳͷͰྲྀੴʹجຊͷͭͰ צห
useState • ReactͷؔίϯϙʔωϯτͰɺී௨ͷมʹΛ ೖͯ͠࠶Ϩϯμʔ͞Εͳ͍ • ͦͷͨΊɺߋ৽+࠶ϨϯμʔΛ͢Δػߏ͕ඞཁ • ͦΕ͕useState
useStateͷྫ import React, { useState } from 'react'; function Example()
{ const [count, setCount] = useState(0); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}> {/* ΫϦοΫ͢Δ͝ͱʹ1૿͑Δ */} Click me </button> </div> ); }
useE ff ect • ෭࡞༻ϑοΫͱݺΕΔ • ୈ2Ҿґଘ͢Δ(͍͍ͨͯState)ͷྻΛ͢ • ୈ2Ҿͷதʹ͋Δ͕มߋ͞ΕΔʹ࣮ߦ͞ΕΔ •
ۭྻΛ͢͜ͱͰ࠷ॳͷҰͷΈ࣮ߦ͢Δ͜ͱ͕Ͱ͖Δ • ٯʹԿ͚ͭͳ͍ͱશͯͷ͕ߋ৽͞ΕΔʹ࣮ߦ͞ΕΔ
useE ff ectͷྫ import React, { useState, useEffect } from
'react'; function Example() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; // ࠶Ϩϯμʔ͞ΕΔʹݺΕΔ }); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}>Click me</button> </div> ); }
useE ff ectͷྫ import React, { useState, useEffect } from
'react'; function Example() { const [count, setCount] = useState(0); useEffect(() => { document.title = `You clicked ${count} times`; // Ұ͔͠ݺΕͳ͍ }, []); return ( <div> <p>You clicked {count} times</p> <button onClick={() => setCount(count + 1)}>Click me</button> </div> ); }
useContext • ͬͨ͜ͱ͕ͳ͍ 🤯 • ωετ͞Εͨࢠίϯϙʔωϯτʹରͯ͠σʔλ ΛϒνࠐΊΔΒ͍͠ • όέπϦϨʔ͠ͳͯ͘Α͍ʂ •
Α͘Θ͔Μͳ͍ͷͰྫলུͤͯ͞΄͍͠
·ͱΊ • ϞμϯϑϩϯτͰJavaScriptϑϨʔϜϫʔΫ͕ ΘΕΔཧ༝࠶ར༻ՄೳͳίʔυΛੜΈग़ͤΔ͔Β • ࠷ۙͷReactͰؔܕίϯϙʔωϯτͰίϯϙʔωϯτΛ هड़͍͖ͯ͠ɺReactͷػೳΛReact HooksͰར༻͢Δ
ࢀߟจݙ • https://qiita.com/Yametaro/items/ 3c27305072464e1d6230 • https://speakerdeck.com/s17001/huremuwakufalseqi- chi-tininaritakatuta • https://github.com/ryu1-1uyr/html_oasobi •
https://ja.reactjs.org/docs/hooks-overview.html