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 NativeアプリにRecoilを導入した話
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
46kuro
October 02, 2021
Technology
36
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
React NativeアプリにRecoilを導入した話
46kuro
October 02, 2021
More Decks by 46kuro
See All by 46kuro
出前館におけるApple Pay運用Tips
46kuro
0
560
Other Decks in Technology
See All in Technology
誤解だらけの開発生産性 / Myths and Misconceptions about Developer Productivity
i35_267
2
950
AI時代の開発生産性は、個人技からチーム設計へ
moongift
PRO
4
2.4k
全員がリーダーである世界へ キリマンジャロ登頂とシェアド・リーダー
jinwatanabe
0
120
AI x 開発生産性を取り巻く予算戦略と投資対効果
i35_267
6
2.4k
Alphaモジュール使っていいのかい!?いけないのかい!?どっちなんだいっ!?
watany
1
300
Multicaで30個のミニプロジェクトをAIエージェント運用して見えてきたこと
eiei114
1
580
キャリアLT会#3
beli68
0
180
【公開用】AI_Dev_Ex2026_AI_登壇資料
matsuritechnologies
PRO
1
370
ダッシュボード"開発"について 〜使われるダッシュボードのつくりかた〜
kimichan
0
100
Amazon Quick 入門!
ysuzuki
2
100
Oracle Base Database Service 技術詳細
oracle4engineer
PRO
15
110k
ファミコンでPHPを動かす / PHP on the Famicom
tomzoh
2
560
Featured
See All Featured
Making Projects Easy
brettharned
120
6.7k
Facilitating Awesome Meetings
lara
57
7k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
How to build a perfect <img>
jonoalderson
1
5.8k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
210
Embracing the Ebb and Flow
colly
88
5.1k
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
730
How to train your dragon (web standard)
notwaldorf
97
6.7k
Reflections from 52 weeks, 52 projects
jeffersonlam
356
21k
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
190
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Stop Working from a Prison Cell
hatefulcrawdad
274
21k
Transcript
3FBDU/BUJWF 4UBUF.BOBHFNFOU-JCSBSZ d3FBDU/BUJWFΞϓϦʹ3FDPJMΛಋೖͨ͠d 4IJOKJ,VSPTBXB 3FBDU/BUJWF.BUTVSJ
ൃද༰ʹ͍ͭͯ w ༰ w 3FDPJMʹ͍ͭͯͬ͘͟Γઆ໌ w 4UBUF.BOBHFNFOUʹ͍ͭͯͷৄࡉͳઆ໌ൺֱݕ౼ߦ͍·ͤΜ w 3FBDU/BUJWF։ൃΛ࢝Ίͯ͘Β͍ͳͷͰɺؒҧ͍͋Ε͝ࢦఠ͓ئ͍͠·͢ w
ରऀ w 4UBUF.BOBHFNFOU-JCSBSZΛͬͨ͜ͱ͕ͳ͍ํ w 3FDPJMʹ͍ͭͯؾʹͳ͍ͬͯΔํ w 3FBDU/BUJWFͰͳ͑͘Δ͔ؾʹͳ͍ͬͯΔํ
͓͍͑ͨ͜͠ͱ ಋೖͷഎܠ 3FDPJMʹ͍ͭͯ 3FBDU/BUJWFڥԼͰى͜Δ*TTVFTʹ͍ͭͯ
3FDPJMಋೖͷഎܠ w ৽نػೳ͓Αͼ৽نը໘ͷ։ൃத w ༷ʑͳσʔλͷऔಘฤूૹ৴ͳͲ͕ߦΘΕΔػೳ w ෳը໘Ͱڞ௨ͱͯ͠༻͢Δଘࡏ w ը໘Ͱѻ͏ػೳσʔλ͕ଟ͍ͨΊɺѻ͏4UBUFଟ͍
4UBUF.BOBHFNFOU-JCSBSZ 4UBSLҎ্ͷ4UBUF.BOBHFNFOU-JCSBSZ w 4UBSɿL w ࠷ଟ͘ΘΕ͍ͯΔ 3FEVY .PC9 w 4UBSɿL
w 4JNQMF 94UBUF w 4UBSɿL w ঢ়ଶભҠɺՄࢹԽπʔϧଘࡏ w 4UBSɿL w (SBQI2-Ͱ༻ BQPMMPDMJFOU 3FDPJM w 4UBSɿL w 4JNQMFɺ'$Ͱ༻ ;VTUBOE w 4UBSɿL w 'MVYϕʔε IUUQTHJUIVCDPNPMFHSKVNJOBXFTPNFSFBDUTUBUFNBOBHFNFOU
͓͍͑ͨ͜͠ͱ ಋೖͷഎܠ 3FDPJMʹ͍ͭͯ 3FBDU/BUJWFڥԼͰى͜Δ*TTVFTʹ͍ͭͯ
3FDPJM w 4UBUF.BOBHFNFOU-JCSBSZ w 'BDFCPPL͕։ൃ w &YQFSJNFOUBMͱ͍͏Ґஔ͚ͮ w 3FBDUͷ)PPLʹͱ͍ͮͨ*OUFSGBDF w
IUUQTSFDPJMKTPSHEPDTJOUSPEVDUJPONPUJWBUJPO w +PUBJͳͲͷɺ3FDPJMʹӨڹΛड͚ͨ-JCSBSZଘࡏ
3FDPJM const TextState = atom({key: 'Text', default: ‘'}); const Content:
React.FC = () => { const [text, setText] = useRecoilState<string>(TextState); return ( <TextInput value={text} onChange={(event) => { setText(event.nativeEvent.text) }} /> ) } w "UPNΛఆٛ w $PNQPOFOU෦Ͱ3FDPJM4UBUFΛఆٛ ˠVTF4UBUFͱಉ͡Α͏ͳ͍ํͰ༻Մೳ w ͦͷଞʹ4FMFDUPS"UPN4FMFDUPSΛα ϙʔτ͢ΔͨΊͷ"1*͕͋Δ
3FDPJM֓ཁ·ͱΊ w '$ʹͱ͍ͮͨ*OUFSGBDFͰ༻Ͱ͖Δ4UBUF.BOBHFNFOU-JCSBSZ w +PUBJͳͲͷӨڹΛड͚ͨ-JCSBSZଘࡏ w "UPN4FMFDUPSΛఆٛͯ͠ɺ)PPLͷΑ͏ʹݺͼग़͢͜ͱͰ༻Ͱ͖Δ w γϯϓϧ w
ߋ৽͞Εͨ$PNQPOFOUͷΈ࠶ඳը͞ΕΔ w ۩ମతͳ༻ํ๏%PDVNFOUΛ͝ࢀরԼ͍͞
͓͍͑ͨ͜͠ͱ ಋೖͷഎܠ 3FDPJMʹ͍ͭͯ 3FBDU/BUJWFڥԼͰى͜Δ*TTVFTʹ͍ͭͯ
$POUSPMMFE$PNQPOFOUT w ࣗͰঢ়ଶΛอ࣋͢Δ$PNQPOFOUT w 3FBDUJOQVU UFYUBSFB TFMFDUͳͲ w 3FBDU/BUJWF5FYU*OQVU 4XJUDIͳͲ
w 3FBDU/BUJWFͷ$POUSPMMFE$PNQPOFOUͷ4UBUFͱͯ͠3FDPJMͷ4UBUFΛ༻ ͢Δͱɺෆ߹͕ൃੜ͢Δ IUUQTSFBDUKTPSHEPDTGPSNTIUNMDPOUSPMMFEDPNQPOFOUT
ྫ5FYU*OQVU VTF4UBUFΛ༻͢Δ const Content: React.FC = () => { const
[text, setText] = useState<string>(''); return ( <TextInput value={text} onChange={(event) => { setText(event.nativeEvent.text) }} /> ) }
ྫ5FYU*OQVU 3FDPJM4UBUFΛ༻͢Δ const TextState = atom({key: 'Text', default: ‘'}); const
Content: React.FC = () => { const [text, setText] = useRecoilState<string>(TextState); return ( <TextInput value={text} onChange={(event) => { setText(event.nativeEvent.text) }} /> ) }
VTF4UBUF VTF3FDPJM4UBUF
ݪҼ w ͓ͦΒ͘ TFU3FDPJM4UBUF෦Ͱඇಉظॲ ཧ͕͍ͬͯΔ w ͓ͦΒ͘ 5FYU*OQVUಉظతʹ͕ߋ৽ ͞ΕΔ͜ͱΛલఏʹ$PNQPOFOU͕࡞ΒΕ ͍ͯΔ
w Ұॠ͚ͩWBMVF͕ݩͷʹΔͨΊɺ͜ ͷΑ͏ͳࣄ͕ى͖Δ w 3FDPJMΛ༻͠ͳͯ͘ɺӈͷΑ͏ͳίʔ υͩͱTFU3FDPJM4UBUFͱಉ݁͡ՌʹͳΔ const Content: React.FC = () => { const [text, setText] = useState<string>(''); return ( <TextInput value={text} onChange={(event) => { const text = event.nativeEvent.text; setTimeout(() => { setText(text) }, 0) }} style={styles.sectionContainer} /> ) }
ରࡦ w جຊతʹɺը໘ͷΈͰߋ৽͞Ε ͨΛ༻͢Δ߹ʹɺ3FDPJMͷ 4UBUFΛ༻ͤͣɺTFU4UBUFΛ༻͍ Δ w Ͳ͏ͯ͠3FDPJMΛ͍͍ͨ߹ ɺVTF4UBUFͰҰ࣌తʹΛߋ৽͢ Δ͜ͱͰճආͰ͖Δ
const TextState = atom({key: 'Text', default: ''}); const Content: React.FC = () => { const [text, setText] = useState<string>(''); const setGlobalText = useSetRecoilState(TextState); useEffect(() => { setGlobalText(text); }, [text]) return ( <TextInput value={text} onChange={(event) => { const text = event.nativeEvent.text; setText(text) }} style={styles.sectionContainer} /> ) }
ͦͷଞ(JUIVCʹڍ͕͍ͬͯΔ*TTVFT
3FMFBTF#VJMEͰ4UBUFߋ৽͕Ͱ͖ͳ͍ w IUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM3FDPJMJTTVFT w 3FBDU/BUJWFͷΈͰى͜ΔΑ͏ w ࠶ݱ͢ΔͷͰ͋Εக໋తͳෆ۩߹ͱͳΓಘΔ w ݱঢ়ɺಛʹى͖ͨ͜ͱͳ͍
.FNPSZ-FBL w ͍͔ͭ͘*TTVFT͕͕͍͋ͬͯΔ w IUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM3FDPJMJTTVFT w IUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM3FDPJMJTTVFT w IUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM3FDPJMJTTVFT w
IUUQTHJUIVCDPNGBDFCPPLFYQFSJNFOUBM3FDPJMJTTVFT w BUPN'BNJMZTFMFDUPS'BNJMZͳͲͷ"1*Λ༻͢Δͱى͖Δʁ w ͜ͷෆ۩߹Λཧ༝ʹ+PUBJΛ༻͍ͯ͠Δͱ͍͏ίϝϯτݟ͔ͭͬͨ
·ͱΊ
·ͱΊ w 3FDPJMͱ͍͍ͯ͢ w "UPN4FMFDUPSΛ༻͢Δ͜ͱͰɺ(MPCBMͳ4UBUFΛVTF4UBUFͱಉ͡ײ֮Ͱ༻Ͱ͖Δ w ॊೈ͗͢ΔͷͰɺνʔϜ։ൃͰ࣮ࡍʹར༻͢Δࡍʹ༻ํ๏Λݕ౼ͨ͠΄͏͕ྑͦ͞͏ w 3FBDU/BUJWFڥԼͰͳ͘༻Ͱ͖͍ͯΔ w
-JCSBSZͱͯ͠&YQFSJNFOUBMͳҐஔ͚ w ͍͔ͭ͘ͷ՝ w 3FBDU/BUJWFͷ$PNQPOFOUͱซ༻͢Δ͜ͱͰى͖Δ*TTVF w ಛఆڥ༻ํ๏Ͱى͖Δ*TTVF
ॴײ w 3FBDUͷΤίγεςϜૉΒ͍͠ w 4UBUF.BOBHFNFOU-JCSBSZͷબࢶ͕ଟ͍ w બࢶ͕ଟ͗ͯ͢ɺ໎͏͜ͱଟ͍ w 3FDPJMҎ֎ͷ4UBUF.BOBHFNFOU-JCSBSZʹֶ͍ͭͯͼ͍ͨ w
ঢ়گʹԠͯ͡બఆͰ͖ΔΑ͏ɺ༷ʑͳ-JCSBSZͷ࣮༻ྫΛֶͼ͍ͨ