1
Use React Patterns To Build
Large Scalable App
Jay Chung @ Modern Web 2018, TW
2
Components
3
SliderNavs
Button
Modal
Loader
Toast
Anchor Table
Radio
NavBar
Dropdown
App
App
4
Patterns
5
6
Small Clues Tell
7
3
4
10
3
8
3
4
10
3
32
+ 42
= 5 102
= 100 32
π
Fix Problems with Elegance
different clues with different patterns
9
Children as Functions
https://github.com/drcmda/react-spring
10
Higher Order Render Props
https://github.com/drcmda/react-spring
11
Higher Order Component
https://github.com/erikras/redux-form
12
Provider Pattern
https://github.com/yahoo/react-intl
13
Compound Component
https://github.com/ant-design/ant-design/
14
STEP 1
container component
A Pattern Journey
STEP 2
compound component
STEP 3
render props
STEP 4
higher order component
STEP 5
provider pattern
Jay Chung (xJkit)
https://github.com/xJkit
https://linkedin.com/in/xjkit54780
https://slideshare.net/JOEYCHUNG2
https://twitter.com/xJkit
About Me
Front End Developer
https://github.com/xJkit/modern-web-2018-demo
https://github.com/xJkit/modern-web-2018-demo
17
Inline Editing Component
18
https://medium.com/@dan_abramov/smart-and-dumb-components-7ca2f9a7c7d0
20
How Things Work
Container Component
data fetching/state changes
How Things Look
Presentational Component
markup, style
22
Presentational Component
23
Container Component
24
Container Component
25
26
InlineEditing in Table renderer
27
InlineEditing Component
29
How to custom button or input styles?
How to change button order or position?
30
How to custom UI styles?
31
You need more props!
🤮
32
STEP 02
A Pattern Journey
33
Container Component
34
Presentational Components Exposed
36
Presentational Components Exposed
React Top Level API
38
Children eat different props
39
Children connect at root
40
Fix Grandchildren Components
41
Context Provider
42
Context Consumer
43
How to use my own UI components?
44
Step 3
A Pattern Journey
45
46
Render channel
Renderless container
48
A render prop is a function prop that
a component uses to know what to render.
49
50
Compound Component
51
Get Everything From
A Render Prop
52
Pass Everything Into
A Render Prop
53
54
Put Your Custom
Components Here
55
Parent decides
how to render
Props collection
56
children
Render Props
Rename
57
children Render Props
Rename
58
Child as a functional component
59
More Use Cases
https://github.com/chenglou/react-motion
61
React Motion
Get styles and you decide
how to render
https://github.com/renatorib/react-powerplug
63
Renderless Containers
64
Only part of components
need state
https://github.com/xJkit/react-goodbye
66
Save reminder modal
How to use HoC for authorization?
68
No logic in App
Logic in the HoC
69
No logic in App
Logic in the HoCs
70
No logic in App
Logic in these HoCs
71
Get More as You Compose
be careful of “name collision”
Utility Components by HoCs
Render Props & HoC
are interchangeable
75
Render Props & HoC are interchangeable
HoC version
76
Render Props & HoC are interchangeable
Render Props version
77
withNetwork
withAuth
Base
connect
Network HoC
Base Component
connect HoC
Auth HoC
Higher Order Component Pattern
78
STEP 05
A Pattern Journey
79
Provider Pattern
PROPS DRILLING
APP
A A
B
C
{
name: “Jay Chung” ,
email: xjkit54780@gmail.com
}
PROPS
PROPS
PROPS
<div>{props.name}</div>
<div>{props.email}</div>
<B {…props} />
<C {…props} />
<A {…props} />
IMPLICITEXPLICIT
APP
A A
B
C
{
name: “Jay Chung” ,
email: xjkit54780@gmail.com
}
PROPS React.createContext
<div>{props.name}</div>
<div>{props.email}</div>
Provider
Consumer
<Consumer>
{(props) => (
)}
</Consumer>
(Render Props)
82
Container Component
STEP 01
Compound Component
STEP 02
Render Props
STEP 03
Higher Order Component
STEP 04
A Pattern Journey
Provider Pattern
STEP 05
83
STEP 6
TrendMicro
https://github.com/trendmicro-frontend
85
1
2
3
4
RECAP
5
Container Component Pattern
Compound Component Pattern
Render Props Pattern
Higher Order Component Pattern
Provider Pattern
86
Controlled
component
Props getters
State reducer pattern
Single element
pattern
PATTERNS COMPARISON
Intuitive Maintainable Flexible Composable Use Cases
Container
Component
Compound
Component
HoC
Render Props
Provider
88
More Use Cases
89
react-redux react-router
90
Provider Pattern
91
Higher Order Component
92
93
Provider Pattern
94
Higher Order
Component
95
Render Props in
React Apollo 2.1
https://spectrum.chat/thread/d2e9ad39-f6b2-4614-ae20-3f619100bb3b
PATTERNS COMPARISON
Intuitive Maintainable Flexible Composable Use Cases
Container
Component ❤❤ ❓ 💢 💢 Any
Compound
Component ❤❤ ❤❤ ❤ 💢
Tab, Nav, Wizard,
Steps
HoC ❤ ❤❤ ❤❤ ❤❤❤
Utility
Component
Render Props ❤ ❤❤ ❤❤❤ ❤
Utility
Component
Provider ❤ ❤❤ ❤ ❤ Theme, i18n
98
thank you
https://github.com/xJkit

Use React Patterns to Build Large Scalable App