React Native Matsuri 2021 で登壇した資料です https://reactnative-matsuri.com/ja
WebΦϯϦʔͷϓϩμΫτͰReact Na*ve for Web ً͘גࣜձࣾ Topotal CDO@sawa-zen@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 1
View Slide
@sawa-zenॴଐɿגࣜձࣾ Topotal৬छɿCDO• ओʹϑϩϯτΤϯυͱσβΠϯΛ୲• UIσβΠϯσβΠϯγεςϜ͕େ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 2
@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 3
React Na(ve for Webͬͯ·͔͢ʁ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 4
ࢲΊͪΌͪ͘Όͬͯ·͢@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 5
ਖ਼͋·Γฉ͔ͳ͍Ͱ͢ΑͶʁ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 6
༗໊Ͳ͜Ζ͕͍ͬͯΔ͕ࣄྫ͕গͳ͍Twi$er Uber Eats Orders@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 7
ͳͥΘΕͳ͍ͷ͔ʁ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 8
∵ React Na(ve ͱ Web ͷίʔυڞ௨Խπʔϧͱޡղ͞Ε͍ͯΔͨΊ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 9
ޡղ͔Βੜ·ΕΔωΨςΟϒͳҹ• ͏ͪΞϓϦҰຊ͔ͩΒͳ͊...• iOS ͱ Android ͷڞ௨Խ͚ͩͰେมͳͷʹ...∴ ݟ͖͞Εͳ͍!@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 10
ࢥ͍ग़ͯ͠ཉ͍͠⛔Write once, run anywhere✅Learn Once, Write Anywhere@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 11
@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 12
web-only Ͱྑ͍ΜͰ͢ʂ! !@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 13
ͰݟํΛม͑ͯΈΔ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 14
React Na(ve for Web Λ७ਮͳ Web ͷ UI ϥΠϒϥϦͱͯ͠ݟΔͱͲ͏͔ʁ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 15
Good pointsϑϩϯτΤϯυࢹͰݟͨྑ͔ͬͨ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 16
Good points① ϛχϚϧͰચ࿅͞Εͨઃܭ• View, Text Ͱ UI ΛߏஙͰ͖Δγϯϓϧ͞• div, span, pͳͲͰॻ͘ΑΓײత• ίϯϙʔωϯτ͕ҙঊΛΘͳ͍• ಠࣗʹελΠϧΛͯΔ͔ଞͷϥΠϒϥϦʹΔ͔બΔ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 17
Good points② ײతͳ Accessibility ؔ࿈ͷهड़ܗࣜ• role Λઃఆ͢Εదͳ DOM ʹมͯ͘͠ΕΔ• View, Text ͰҰ୴ελΠϦϯά͚͔ͩͯ͠Β accessibility* propΛޙ͚ͰରԠͰ͖Δ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 18
Good points③ ॏෳͨ͠ CSS ͷ࠷దԽ• ҎԼͷ݅Λຬͨͨ͠ style ͷ CSS ͍ճ͞ΕΔ1. StyleSheet.create Λͬͯهड़͞Ε͍ͯΔ͜ͱ2. ಉ͡ͷ key ͱ value ͷϖΞ͕ଞͰΘΕ͍ͯΔ͜ͱ• Tailwind ͱ͍ۙײ֮@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 19
@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 20
Good points④ style ͷ্ॻ͖ͷ͢͠͞• ྻͰࢦఆͨ͠ޙऀ͕উͭͱ͍͏γϯϓϧ͞• className Ͱಉ༷ʹॻ͜͏ͱ͢ΔͱϥΠϒϥϦ͕ඞཁ• clsx• classnames@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 21
ফ pointsϑϩϯτΤϯυࢹͰݟͨΊΜͲ͏ͩͬͨ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 22
ফ points① media query ͕ RN ʹແ͍• react-responsive ͳͲΛ͍͑ۙ͜ͱͰ͖Δ• SSR SSG ͷॳճඳըͰը໘෯͕Θ͔Βͳ͍• ϥΠϯλΠϜ࣌ʹॲཧ͞ΕϨΠΞτγϑτ͕ى͜Δ• LP ίʔϙϨʔταΠτʹ͍͍ͯͳ͍@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 23
ফ points② ٙࣅΫϥε͕ RN ʹແ͍• CSS ͷ :hover, :focus ͳͲ͕͑ͳ͍• ϒϥβϚεૢ࡞ɺΩʔϘʔυૢ࡞͕લఏͳͷͰΫϦςΟΧϧ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 24
ফ points② ͷղܾࡦ: ϋϯυϥΛ͏• ࣮ RN for Web ͕ಠࣗϋϯυϥΛՃͯ͘͠Ε͍ͯΔ• onHoverIn, onHoverOut• onFocus, onBlur• ͨͩܕʹແ͍ͷͰ֦ு͢Δඞཁ͋Γ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 25
@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 26
ফ points③ position: fixed; ͕ RN ʹແ͍• ܕΤϥʔʹͳΔ• any as Ͱಀ͛ͨ͘ͳΔ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 27
ফ points③ ͷղܾࡦ1: ઃܭΛݟ͢͜Εʹૺ۰ͨ͠߹ҎԼͷ֬ೝΛͨ͠ํ͕ྑͦ͞͏1. absolute ͡ΌͩΊͳͷ͔?2. Modal ίϯϙʔωϯτͰղܾ͠ͳ͍͔?3. ReactDOM ͷ portal Λղܾ͠ͳ͍͔?@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 28
ফ points③ ͷղܾࡦ2: ܕͷΦʔόʔϥΠυimport 'react-native'declare module 'react-native' {interface ViewStyle {position: 'relative' | 'absolute' | 'fixed'}}@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 29
ফ points④ linear-gradient ͕ RN ʹແ͍• ҰൠతʹݟΔҎԼॻ͖ํΛͯ͠ө͞Εͳ͍• background: 'linear-gradient(#00F, #F00)'@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 30
ফ points④ ͷղܾࡦ: backgroundImage Λ͏• linear-gradient() ͦͦը૾σʔλܕΒ͍͠• url() ͱಉ༷backgroundImage: 'linear-gradient(#00F, #F00)'@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 31
etc...@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 32
ফ points ࠓޙղফ͞ΕΔ͔• React GUIͷొͰঢ়گ͕มΘΓͦ͏• ফ point ΄΅ղܾ͞Εͦ͏งғؾ• RN ʹ༷͕౷߹͞ΕΔ or React GUI ͕ಠཱͯ͠ϦϦʔε͞ΕΔະདྷ͕͍͔ͭ͘Δ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 33
RN ͱͷڞ௨ԽͷͨΊͷੴReact GUI ͷੴ@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 34
·ͱΊ• React Na(ve for Web web-only Ͱ OK• Web ༻ UI ϥΠϒϥϦͱͯ͠༏लͰ͋Δ• ଟগͷফ͏͕ͳΜͱ͔ͳΓͦ͏• React GUI ʹظ"@sawa-zen (2021/10/2) React Na4ve Matsuri 2021 35