Skip to content

Commit e1037c9

Browse files
committed
Merge pull request #39 from ethul/topic/lifecycle-methods
Topic/lifecycle methods
2 parents 91d07ac + 0d29bf3 commit e1037c9

File tree

3 files changed

+40
-5
lines changed

3 files changed

+40
-5
lines changed

Diff for: docs/React.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -155,7 +155,7 @@ A rendering function.
155155
#### `UISpec`
156156

157157
``` purescript
158-
type UISpec props state eff = { render :: Render props state eff, displayName :: String, getInitialState :: UIRef -> Eff (props :: ReactProps props, state :: ReactState Disallowed state, refs :: ReactRefs Disallowed | eff) state, componentWillMount :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs Disallowed | eff) Unit, componentDidMount :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, componentWillReceiveProps :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, shouldComponentUpdate :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Boolean, componentWillUpdate :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, componentDidUpdate :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit, componentWillUnmount :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit }
158+
type UISpec props state eff = { render :: Render props state eff, displayName :: String, getInitialState :: UIRef -> Eff (props :: ReactProps props, state :: ReactState Disallowed state, refs :: ReactRefs Disallowed | eff) state, componentWillMount :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs Disallowed | eff) Unit, componentDidMount :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, componentWillReceiveProps :: UIRef -> props -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, shouldComponentUpdate :: UIRef -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Boolean, componentWillUpdate :: UIRef -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadWrite state, refs :: ReactRefs ReadOnly | eff) Unit, componentDidUpdate :: UIRef -> props -> state -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit, componentWillUnmount :: UIRef -> Eff (props :: ReactProps props, state :: ReactState ReadOnly state, refs :: ReactRefs ReadOnly | eff) Unit }
159159
```
160160

161161
A specification of a component.

Diff for: src/React.js

+28
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,34 @@ exports.mkUI = function(ss) {
4747
if (s === "displayName") {
4848
result[s] = ss[s];
4949
}
50+
else if (s === "componentWillReceiveProps") {
51+
result[s] = (function(impl) {
52+
return function(nextProps) {
53+
return impl(this)(nextProps)();
54+
}
55+
})(ss[s]);
56+
}
57+
else if (s === "shouldComponentUpdate") {
58+
result[s] = (function(impl) {
59+
return function(nextProps, nextState) {
60+
return impl(this)(nextProps)(nextState.state)();
61+
}
62+
})(ss[s]);
63+
}
64+
else if (s === "componentWillUpdate") {
65+
result[s] = (function(impl) {
66+
return function(nextProps, nextState) {
67+
return impl(this)(nextProps)(nextState.state)();
68+
}
69+
})(ss[s]);
70+
}
71+
else if (s === "componentDidUpdate") {
72+
result[s] = (function(impl) {
73+
return function(prevProps, prevState) {
74+
return impl(this)(prevProps)(prevState.state)();
75+
}
76+
})(ss[s]);
77+
}
5078
else {
5179
result[s] = (function(impl) {
5280
return function() {

Diff for: src/React.purs

+11-4
Original file line numberDiff line numberDiff line change
@@ -170,27 +170,34 @@ type UISpec props state eff =
170170
) Unit
171171
, componentWillReceiveProps
172172
:: UIRef ->
173+
props ->
173174
Eff ( props :: ReactProps props
174175
, state :: ReactState ReadWrite state
175176
, refs :: ReactRefs ReadOnly
176177
| eff
177178
) Unit
178179
, shouldComponentUpdate
179180
:: UIRef ->
181+
props ->
182+
state ->
180183
Eff ( props :: ReactProps props
181184
, state :: ReactState ReadWrite state
182185
, refs :: ReactRefs ReadOnly
183186
| eff
184187
) Boolean
185188
, componentWillUpdate
186189
:: UIRef ->
190+
props ->
191+
state ->
187192
Eff ( props :: ReactProps props
188193
, state :: ReactState ReadWrite state
189194
, refs :: ReactRefs ReadOnly
190195
| eff
191196
) Unit
192197
, componentDidUpdate
193198
:: UIRef ->
199+
props ->
200+
state ->
194201
Eff ( props :: ReactProps props
195202
, state :: ReactState ReadOnly state
196203
, refs :: ReactRefs ReadOnly
@@ -216,10 +223,10 @@ spec st render =
216223
, getInitialState: \_ -> pure st
217224
, componentWillMount: \_ -> return unit
218225
, componentDidMount: \_ -> return unit
219-
, componentWillReceiveProps: \_ -> return unit
220-
, shouldComponentUpdate: \_ -> return true
221-
, componentWillUpdate: \_ -> return unit
222-
, componentDidUpdate: \_ -> return unit
226+
, componentWillReceiveProps: \_ _ -> return unit
227+
, shouldComponentUpdate: \_ _ _ -> return true
228+
, componentWillUpdate: \_ _ _ -> return unit
229+
, componentDidUpdate: \_ _ _ -> return unit
223230
, componentWillUnmount: \_ -> return unit
224231
}
225232

0 commit comments

Comments
 (0)