Slide 1

Slide 1 text

Container Component͸ඞཁͳͷ͔ גࣜձࣾICS ৿ా উॣ ྩ࿨ݩ೥9݄2೔

Slide 2

Slide 2 text

ࣗݾ঺հ ৿ా উॣ (΋Γͨ ·͞ͱ͠) @texdeath લ৬: Ϡϑʔגࣜձࣾ → ݱ৬: גࣜձࣾICS ϑϩϯτΤϯυΤϯδχΞ ීஈ͸React / Vue / Node.js ͋ͨΓΛॻ͍͍ͯ·͢

Slide 3

Slide 3 text

Agenda • ͸͡Ίʹʙ͜ͷ࿩Λ͢Δഎܠ • Redux Hooks APIʹ͓͚ΔContainer Component • Container Component͕ඞཁͳ৔߹ • ·ͱΊ

Slide 4

Slide 4 text

͸͡Ίʹ • Reactͷίϯϙʔωϯτͷ͓࿩Λ͠·͢ • Container Component͕ඞཁͳ͍ͱ͍͏࿩Ͱ͸͋Γ·ͤΜ • ඞཁɾෆඞཁͳ৔໘Λ͔ͬ͠ΓݟۃΊͯ࢖͍ͬͯ͜͏ͱ͍͏ ࿩Ͱ͢

Slide 5

Slide 5 text

Container Component ࡞ͬͯ·͔͢ʁ

Slide 6

Slide 6 text

͜ͷ࿩Λ͢Δഎܠ • ۀ຿ͰReact + Reduxͷ૊Έ߹ΘͤͰSPAΛ࡞Δ͜ͱ͕ଟ͍ • ReduxͷσʔλόΠϯσΟϯάʹ͸react-reduxΛ࢖༻͍ͯ͠Δ • UIͱΞϓϦέʔγϣϯϩδοΫΛ෼அ͢ΔͨΊɺ Container ComponentͱPresentational ComponentΛ ͦΕͧΕ༻ҙ͍ͯ͠Δ

Slide 7

Slide 7 text

͜ͷ࿩Λ͢Δഎܠ • ۀ຿ͰReact + Reduxͷ૊Έ߹ΘͤͰSPAΛ࡞Δ͜ͱ͕ଟ͍ • ReduxͷσʔλόΠϯσΟϯάʹ͸react-reduxΛ࢖༻͍ͯ͠Δ • UIͱΞϓϦέʔγϣϯϩδοΫΛ෼அ͢ΔͨΊɺ Container ComponentͱPresentational ComponentΛ ͦΕͧΕ༻ҙ͍ͯ͠Δ

Slide 8

Slide 8 text

ͱΓ͋͑ͣContainerΛͭ͘Δ໰୊ import { connect } from "react-redux"; import AppComponent from "../components/AppComponent"; const mapStateToProps = null; const mapDispatchToProps = null; export default connect( mapStateToProps, mapDispatchToProps )(AppComponent);

Slide 9

Slide 9 text

ͱΓ͋͑ͣContainerΛͭ͘Δ໰୊ import { connect } from "react-redux"; import AppComponent from "../components/AppComponent"; const mapStateToProps = null; const mapDispatchToProps = null; export default connect( mapStateToProps, mapDispatchToProps )(AppComponent); state΋action΋౉͞ͳ͍ɺͨͩίϯϙʔωϯτΛϥοϓ͢Δ͚ͩ

Slide 10

Slide 10 text

ͨͩconnect͢ΔͨΊʹ ଘࡏ͢ΔContainer Component

Slide 11

Slide 11 text

• Container Componentͷຊདྷͷ໨తɾϝϦοτ͸ɺ • UIͱΞϓϦέʔγϣϯϩδοΫΛ෼ղ • ίʔυྔͷ࡟ݮɺՄಡੑɾϝϯςφϯεੑ޲্ • Presentational ComponentΛ࢖͍ճͤΔΑ͏ʹ͢Δ ͷ͸ͣ ຊདྷͷ໨త

Slide 12

Slide 12 text

• Presentational ComponentͱContainer Component͸ 1:1Ͱ͸ͳ͍ • ఆܕจͷΑ͏ʹmapStateToPropsɺ mapDispatchToPropsɺconnectΛॻ͘ඞཁ͸ͳ͍ • ෆཁʹ࡞ΔͱΉ͠Ζίʔυྔ͕૿͠ɺݟ௨͕͠ѱ͘ͳΔ ແବͳίϯϙʔωϯτ͸࡞Βͳ͍

Slide 13

Slide 13 text

Dan Abramovͷҙݟ Redux࡞ऀͰ͋Δ Dan Abramovͷهࣄ

Slide 14

Slide 14 text

Dan Abramovͷҙݟ ҙ༁: ɾ݁ߏલ(2015೥͝Ζ)ʹContainer Componentͷ هࣄΛॻ͍͚ͨͲɺࠓ͸ίϯϙʔωϯτͷ෼ׂ͸Φεεϝ͠ͳ͍ ɾඞཁ΋ͳ͍ͷʹContainer Component͕ ઃܭ࣌ʹ૊Έࠐ·Ε͍ͯΔέʔε͕ଟ͍ ɾ͜ͷख๏͕ศརͩͱࢥͬͨཧ༝͸ɺෳࡶͳStateͷϩδοΫΛ ίϯϙʔωϯτ͔Β෼཭Ͱ͖ΔͨΊͰ͋Δ ɾࠓ͸Hooks΋͋Δ͠ɺ෼ׂ͠ͳͯ͘΋ಉ͜͡ͱ͕Ͱ͖Δ https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0

Slide 15

Slide 15 text

Redux Hooks APIʹ͓͚Δ Container Component

Slide 16

Slide 16 text

• 2019೥6݄ʹreact-redux͔ΒRedux Hooks API͕ϦϦʔε • useSelector΍useReducerͱ͍ͬͨؔ਺Λݺͼग़͢͜ͱͰ ίϯϙʔωϯτʹσʔλόΠϯσΟϯά͕Ͱ͖ΔΑ͏ʹͳͬ ͨ • ͜ΕʹΑΓconnectؔ਺Λ࢖Θͳͯ͘΋Α͘ͳͬͨ react-redux͕Hooks APIʹରԠ

Slide 17

Slide 17 text

Hooks APIͰͷσʔλόΠϯσΟϯά export const App: FunctionComponent = () => { const count = useSelector((state: RootState) => state.counter.count); const dispatch = useDispatch(); const incrementCounter = useCallback( () => dispatch({ type: counterTypes.INCREMENT_COUNTER }), [dispatch] ); return (
{count}
increment ); };

Slide 18

Slide 18 text

Hooks APIͰͷσʔλόΠϯσΟϯά export const App: FunctionComponent = () => { const count = useSelector((state: RootState) => state.counter.count); const dispatch = useDispatch(); const incrementCounter = useCallback( () => dispatch({ type: counterTypes.INCREMENT_COUNTER }), [dispatch] ); return (
{count}
increment ); }; ͜ͷ͋ͨΓͷηϨΫλʔ͕ mapStateToProps, mapDispatchToPropsͷ໾ׂΛՌͨ͢

Slide 19

Slide 19 text

connect͠ͳ͚Ε͹ Container Component͍Βͳ͍ɾɾɾʁ

Slide 20

Slide 20 text

ඞཁͩͱײͨ͡Β࡞੒͢Ε͹Α͍

Slide 21

Slide 21 text

• ঢ়ଶͱView͕ີ݁߹ʹͳΔ • ୯ମςετͷ೉қ౓্͕͕Δ • ෳࡶͳίϯϙʔωϯτͷ৔߹ɺ੾Γ෼͚͕೉͘͠ͳΔ • ϝϯςφϯεੑͷ௿Լ Container Component͕ͳ͍ͱԿ͕ࠔΔ͔ →։ൃΛਐΊ͍ͯ͘͏ͪʹɺඞཁʹͳͬͯ͘Δ͜ͱ΋͋Δ

Slide 22

Slide 22 text

• ΞϓϦέʔγϣϯ͕ංେԽ͖ͯͨ࣌͠ • ౉͍ͯ͠Δprops͕͔ͳΓଟ͘ͳͬͯ͠·͍ͬͯΔ • View Componentͷ਺͕ඇৗʹଟ͘ɺΑΓγϯϓϧʹͨ͠ ͍ • Reduxґଘ͔ΒίϯϙʔωϯτΛ੾Γ཭ͨ͘͠ͳͬͨ࣌ Container Component͕ඞཁͳ৔߹

Slide 23

Slide 23 text

• ΞϓϦέʔγϣϯ͕ංେԽ͖ͯͨ࣌͠ • ౉͍ͯ͠Δprops͕͔ͳΓଟ͘ͳͬͯ͠·͍ͬͯΔ • View Componentͷ਺͕ඇৗʹଟ͘ɺΑΓγϯϓϧʹͨ͠ ͍ • Reduxґଘ͔ΒίϯϙʔωϯτΛ੾Γ཭ͨ͘͠ͳͬͨ࣌ Container Component͕ඞཁͳ৔߹ →͜͏͍ͬͨέʔεͷ࣌͸ɺσβΠϯύλʔϯͱͯ͠ಋೖΛݕ౼

Slide 24

Slide 24 text

• ແҙຯͳContainer Component͸࡞Βͳ͍ • Redux Hooks APIΛ࢖͑͹connect͸ແͤ͘Δ • ΞϓϦέʔγϣϯ্ɺඞཁͩͱײͨ࣌͡ʹContainerͷಋ ೖΛݕ౼͢Δ ·ͱΊ

Slide 25

Slide 25 text

͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ Copyright 2019 ICS INC. All rights reserved. ৿ా উॣ @texdeath ICS MEDIA΍TwitterͰ΋΢ΣϒςΫϊϩδʔͷ৘ใΛൃ৴த ics.media