Skip to content

Commit 93301ad

Browse files
committed
Parameterizing ReactThis with props and state
Resolves #41
1 parent 53b9e47 commit 93301ad

File tree

2 files changed

+25
-25
lines changed

2 files changed

+25
-25
lines changed

Diff for: docs/React.md

+9-9
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@ A virtual DOM node, or component.
1313
#### `ReactThis`
1414

1515
``` purescript
16-
data ReactThis :: *
16+
data ReactThis :: * -> * -> *
1717
```
1818

1919
A reference to a component, essentially React's `this`.
@@ -147,15 +147,15 @@ A function which handles events.
147147
#### `Render`
148148

149149
``` purescript
150-
type Render props state eff = ReactThis -> Eff (props :: ReactProps props, refs :: ReactRefs Disallowed, state :: ReactState ReadOnly state | eff) ReactElement
150+
type Render props state eff = ReactThis props state -> Eff (props :: ReactProps props, refs :: ReactRefs Disallowed, state :: ReactState ReadOnly state | eff) ReactElement
151151
```
152152

153153
A rendering function.
154154

155155
#### `ReactSpec`
156156

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

161161
A specification of a component.
@@ -179,47 +179,47 @@ React class for components.
179179
#### `getProps`
180180

181181
``` purescript
182-
getProps :: forall props eff. ReactThis -> Eff (props :: ReactProps props | eff) props
182+
getProps :: forall props state eff. ReactThis props state -> Eff (props :: ReactProps props | eff) props
183183
```
184184

185185
Read the component props.
186186

187187
#### `getRefs`
188188

189189
``` purescript
190-
getRefs :: forall write eff. ReactThis -> Eff (refs :: ReactRefs (Read write) | eff) Refs
190+
getRefs :: forall props state write eff. ReactThis props state -> Eff (refs :: ReactRefs (Read write) | eff) Refs
191191
```
192192

193193
Read the component refs.
194194

195195
#### `getChildren`
196196

197197
``` purescript
198-
getChildren :: forall props eff. ReactThis -> Eff (props :: ReactProps props | eff) (Array ReactElement)
198+
getChildren :: forall props state eff. ReactThis props state -> Eff (props :: ReactProps props | eff) (Array ReactElement)
199199
```
200200

201201
Read the component children property.
202202

203203
#### `writeState`
204204

205205
``` purescript
206-
writeState :: forall state eff. ReactThis -> state -> Eff (state :: ReactState ReadWrite state | eff) state
206+
writeState :: forall props state eff. ReactThis props state -> state -> Eff (state :: ReactState ReadWrite state | eff) state
207207
```
208208

209209
Write the component state.
210210

211211
#### `readState`
212212

213213
``` purescript
214-
readState :: forall state write eff. ReactThis -> Eff (state :: ReactState (Read write) state | eff) state
214+
readState :: forall props state write eff. ReactThis props state -> Eff (state :: ReactState (Read write) state | eff) state
215215
```
216216

217217
Read the component state.
218218

219219
#### `transformState`
220220

221221
``` purescript
222-
transformState :: forall state eff. ReactThis -> (state -> state) -> Eff (state :: ReactState ReadWrite state | eff) state
222+
transformState :: forall props state eff. ReactThis props state -> (state -> state) -> Eff (state :: ReactState ReadWrite state | eff) state
223223
```
224224

225225
Transform the component state by applying a function.

Diff for: src/React.purs

+16-16
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ import Control.Monad.Eff (Eff())
6161
foreign import data ReactElement :: *
6262

6363
-- | A reference to a component, essentially React's `this`.
64-
foreign import data ReactThis :: *
64+
foreign import data ReactThis :: * -> * -> *
6565

6666
-- | An event handler. The type argument represents the type of the event.
6767
foreign import data EventHandler :: * -> *
@@ -136,7 +136,7 @@ type EventHandlerContext eff props state result =
136136

137137
-- | A rendering function.
138138
type Render props state eff =
139-
ReactThis ->
139+
ReactThis props state ->
140140
Eff ( props :: ReactProps props
141141
, refs :: ReactRefs Disallowed
142142
, state :: ReactState ReadOnly state
@@ -148,36 +148,36 @@ type ReactSpec props state eff =
148148
{ render :: Render props state eff
149149
, displayName :: String
150150
, getInitialState
151-
:: ReactThis ->
151+
:: ReactThis props state ->
152152
Eff ( props :: ReactProps props
153153
, state :: ReactState Disallowed state
154154
, refs :: ReactRefs Disallowed
155155
| eff
156156
) state
157157
, componentWillMount
158-
:: ReactThis ->
158+
:: ReactThis props state ->
159159
Eff ( props :: ReactProps props
160160
, state :: ReactState ReadWrite state
161161
, refs :: ReactRefs Disallowed
162162
| eff
163163
) Unit
164164
, componentDidMount
165-
:: ReactThis ->
165+
:: ReactThis props state ->
166166
Eff ( props :: ReactProps props
167167
, state :: ReactState ReadWrite state
168168
, refs :: ReactRefs ReadOnly
169169
| eff
170170
) Unit
171171
, componentWillReceiveProps
172-
:: ReactThis ->
172+
:: ReactThis props state ->
173173
props ->
174174
Eff ( props :: ReactProps props
175175
, state :: ReactState ReadWrite state
176176
, refs :: ReactRefs ReadOnly
177177
| eff
178178
) Unit
179179
, shouldComponentUpdate
180-
:: ReactThis ->
180+
:: ReactThis props state ->
181181
props ->
182182
state ->
183183
Eff ( props :: ReactProps props
@@ -186,7 +186,7 @@ type ReactSpec props state eff =
186186
| eff
187187
) Boolean
188188
, componentWillUpdate
189-
:: ReactThis ->
189+
:: ReactThis props state ->
190190
props ->
191191
state ->
192192
Eff ( props :: ReactProps props
@@ -195,7 +195,7 @@ type ReactSpec props state eff =
195195
| eff
196196
) Unit
197197
, componentDidUpdate
198-
:: ReactThis ->
198+
:: ReactThis props state ->
199199
props ->
200200
state ->
201201
Eff ( props :: ReactProps props
@@ -204,7 +204,7 @@ type ReactSpec props state eff =
204204
| eff
205205
) Unit
206206
, componentWillUnmount
207-
:: ReactThis ->
207+
:: ReactThis props state ->
208208
Eff ( props :: ReactProps props
209209
, state :: ReactState ReadOnly state
210210
, refs :: ReactRefs ReadOnly
@@ -231,22 +231,22 @@ spec st renderFn =
231231
foreign import data ReactClass :: * -> *
232232

233233
-- | Read the component props.
234-
foreign import getProps :: forall props eff. ReactThis -> Eff (props :: ReactProps props | eff) props
234+
foreign import getProps :: forall props state eff. ReactThis props state -> Eff (props :: ReactProps props | eff) props
235235

236236
-- | Read the component refs.
237-
foreign import getRefs :: forall write eff. ReactThis -> Eff (refs :: ReactRefs (Read write) | eff) Refs
237+
foreign import getRefs :: forall props state write eff. ReactThis props state -> Eff (refs :: ReactRefs (Read write) | eff) Refs
238238

239239
-- | Read the component children property.
240-
foreign import getChildren :: forall props eff. ReactThis -> Eff (props :: ReactProps props | eff) (Array ReactElement)
240+
foreign import getChildren :: forall props state eff. ReactThis props state -> Eff (props :: ReactProps props | eff) (Array ReactElement)
241241

242242
-- | Write the component state.
243-
foreign import writeState :: forall state eff. ReactThis -> state -> Eff (state :: ReactState ReadWrite state | eff) state
243+
foreign import writeState :: forall props state eff. ReactThis props state -> state -> Eff (state :: ReactState ReadWrite state | eff) state
244244

245245
-- | Read the component state.
246-
foreign import readState :: forall state write eff. ReactThis -> Eff (state :: ReactState (Read write) state | eff) state
246+
foreign import readState :: forall props state write eff. ReactThis props state -> Eff (state :: ReactState (Read write) state | eff) state
247247

248248
-- | Transform the component state by applying a function.
249-
transformState :: forall state eff. ReactThis -> (state -> state) -> Eff (state :: ReactState ReadWrite state | eff) state
249+
transformState :: forall props state eff. ReactThis props state -> (state -> state) -> Eff (state :: ReactState ReadWrite state | eff) state
250250
transformState ctx f = do
251251
state <- readState ctx
252252
writeState ctx $ f state

0 commit comments

Comments
 (0)