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
yayamura
December 25, 2017
Programming
380
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React入門
yayamura
December 25, 2017
Other Decks in Programming
See All in Programming
New "Type" system on PicoRuby
pocke
1
480
密結合なバックエンドから TypeScript のコードを生成する
kemuridama
1
750
Oxcを導入して開発体験が向上した話
yug1224
4
290
CLIであることを活かしたGitHub Copilot CLI活用術 / GitHub Copilot CLI Pro Tips & Tricks
nao_mk2
1
1.2k
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
3.3k
AI時代のUIはどこへ行く?その2!
yusukebe
19
6.7k
エージェンティックRAGにAWSで入門しよう!
har1101
8
1.2k
AIとASP.NET Coreで雑Webアプリを作った話
mayuki
0
360
ふつうのFeature Flag実践入門
irof
7
3.6k
Java × distroless で 軽量なコンテナイメージを / Java on Distroless
contour_gara
0
500
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
760
TypeSpec で繋ぐ複数プロダクトの型安全
maroon8021
1
400
Featured
See All Featured
The Limits of Empathy - UXLibs8
cassininazir
1
350
Why Mistakes Are the Best Teachers: Turning Failure into a Pathway for Growth
auna
0
150
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
231
23k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
KATA
mclloyd
PRO
35
15k
[RailsConf 2023 Opening Keynote] The Magic of Rails
eileencodes
31
10k
Building Adaptive Systems
keathley
44
3k
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
360
SERP Conf. Vienna - Web Accessibility: Optimizing for Inclusivity and SEO
sarafernandez
2
1.5k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
2
210
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
4.3k
Raft: Consensus for Rubyists
vanstee
141
7.5k
Transcript
3FBDUೖ
3FBDUͱ w %FDMBSBUJWF એݴత w $PNQPOFOU#BTFE ίϯϙʔωϯτϕʔε w
-FBSO0ODF 8SJUF"OZXIFSF Ͳ͜Ͱ͑Δ 7JFXྖҬͷ+BWBTDSJQUϑϨʔϜϫʔΫ
%FDMBSBUJWF એݴత ϏϡʔͷඳըॲཧΛఆٛ͢ΔͷͰͳ͘ɺϏϡʔͷ༗ Γ༷Λએݴͱͯ͠ఆٛ͢Δɻ Ϗϡʔͷঢ়ଶมߋʹΑΔ࠶ϨϯμϦϯά3FBDU͕ ޮతʹ࣮ߦɻ એݴͱͯ͠ͷϏϡʔίʔυ͔Β࣮ߦ࣌ͷಈ࡞͕༧ଌ ͘͢͠ɺσόοά༰қɻ
$PNQPOFOU#BTFE ίϯϙʔωϯτϕʔε ΧϓηϧԽ͞Εͨίϯϙʔωϯτ͕ࣗͷঢ়ଶΛཧ͢ Δɻ ίϯϙʔωϯτ+BWBTDSJQUͰهड़͢ΔͷͰɺ)5.-ς ϯϓϨʔτͱҧ͍ɺ+BWBTDSJQUͷσʔλܗࣜ ɾจ ࣈྻͱ͍ͬͨσʔλܕɺྻɾࣙॻ ͕ͦͷ··͑Δɻ
-FBSO0ODF 8SJUF"OZXIFSF Ͳ͜Ͱ͑Δ .PEFM$POUSPMMFSͷΈΛલఏͱ͠ͳ͍ͷͰऔ Γճ͕͠Α͘ɺଞͷ'8ͱͷΈ߹Θͤࣗࡏɻ αʔόαΠυ OPEF Ͱಈ͖ɺωΠςΟϒΞϓϦ ॻ͚Δ 3FBDU/BUJWF
ɻ
+49 import React, { Component } from 'react'; import ReactDOM
from 'react-dom'; // ίϯϙʔωϯτ class App extends Component { render() { return <Hello />; } } // Stateless Functional Component const Hello = () => <div>Hello React!!!</div>; // initialize ReactDOM.render(<App/>, document.getElementById('app')); +BWBTDSJQU֦ுͷλάߏจɻ+BWB4DSJQUF9UFOUIJPO $PNQPOFOU ಠࣗλάͷΑ͏ͳͷ
)FMMP8PSME import React, { Component } from 'react'; import ReactDOM
from 'react-dom'; // Component class App extends Component { render() { return <Hello />; } } // Stateless Functional Component const Hello = () => <div>Hello React!!!</div>; // initialize ReactDOM.render(<App/>, document.getElementById('app')); <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>React</title> </head> <body> <div id="app" /> </body> </html> JOEFYKTY JOEFYIUNM
1SPQFSUZͱ4UBUF 1SPQFSUZ 4UBUF w ίϯϙʔωϯτͷҾ w มߋ͞Εͳ͍ w ίϯϙʔωϯτ͕෦ʹ อ࣋͢Δঢ়ଶ
w มߋ͞ΕΔ
ίϯϙʔωϯτؒͷσʔλͷड͚͠ ͔Βࢠ ࢠ͔Β 1SPQFSUZͱͯ͢͠ɻ ͕ࢠʹࣗΒͷ4UBUFΛૢ ࡞͢ΔϝιουΛ͢ɻ ࢠ͕ͷ4UBUFΛૢ࡞͢Δ ϝιουΛݺͼग़͢ɻ
ίʔυαϯϓϧ import React, { Component } from 'react'; import ReactDOM
from 'react-dom'; // Parent Component class App extends Component { constructor() { super(); this.state = { messageBase: 'Hello React', message: 'Hello React!', count: 1, }; this.incrementCount = this.incrementCount.bind(this); this.decrementCount = this.decrementCount.bind(this); } // Handler incrementCount() { const { messageBase, count } = this.state; const nxCount = count + 1; this.setState({ ...this.state, // Spread Properties message: messageBase + '!'.repeat(nxCount), count: nxCount, }); } decrementCount() { const { messageBase, count } = this.state; const nxCount = count > 0 ? count - 1 : 0; this.setState({ ...this.state, message: messageBase + '!'.repeat(nxCount), count: nxCount, }); } ଓ͘ 4UBUFͷॳظԽ ࢠʹ͢4UBUFΛૢ࡞͢Δϝιου
ίʔυαϯϓϧ render() { const { message } = this.state; return
( <div> <div>{message}</div> <PlusMinusButton plusMinus={'+'} changeCount={this.incrementCount} /> <PlusMinusButton plusMinus={'-'} changeCount={this.decrementCount} /> </div> ); } } // Child Component const PlusMinusButton = ({ plusMinus, changeCount }) => { return <button onClick={changeCount}>{plusMinus}</button>; }; // Initialization ReactDOM.render(<App/>, document.getElementById('app')); "QQͷଓ͖ 1SPQFSUZͷड͚͠ ͔Β͞ΕͨϝιουΛΠϕϯτϦεφʔͱͯ͠ొ ͔Β͞Εͨ PSΛϘλϯϥϕϧͱͯ͠ར༻ IUUQTHJUIVCDPNZULBZBNVSBTUBSUSFBDUTUBUF
+BWB4DSJQUΛֶͿ 3FBDU(SBQI2-ΞϓϦ։ൃक़ ຖिਫ༵ɿ ։࠵ॴɿ ࢀՃඅɿ ʙʢ։ʣ ΪʔΫΦϑΟεܙൺण ԁ IUUQTNFUFPSGBODPOOQBTTDPN
5XJUUFSɿ (JU)VCɿ ϒϩάɿ !EBJ@TIJ IUUQTHJUIVCDPNEBJTIJ IUUQTNFEJVNDPN!EBJ@TIJ ओ࠵ऀհ
3FBDUɿ 3FEVYɿ (SBQI2-ɿ &4 શճ ɿ 7VFKTɿ /FYUKTɿ 3FBDU/BUJWFɿ 8FCQBDLɿ
IUUQCBTJDSFBDUBYMJHIUDPNIUNM IUUQCBTJDSFEVYBYMJHIUDPNIUNM IUUQCBTJDXFCUFDIBYMJHIUDPNHSBQIRMIUNM IUUQCBTJDXFCUFDIBYMJHIUDPNFTIUNM IUUQCBTJDXFCUFDIBYMJHIUDPNWVFKTIUNM IUUQCBTJDXFCUFDIBYMJHIUDPNOFYUKTIUNM IUUQCBTJDXFCUFDIBYMJHIUDPNDSOBIUNM IUUQCBTJDXFCUFDIBYMJHIUDPNXFCQBDLIUNM ࣗशڭࡐ