Skip to content

Commit 1d3738e

Browse files
committed
Create a stateless class with children
Resolves #61
1 parent 1b37ba0 commit 1d3738e

File tree

3 files changed

+31
-5
lines changed

3 files changed

+31
-5
lines changed

docs/React.md

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -318,6 +318,14 @@ createClassStateless :: forall props. (props -> ReactElement) -> ReactClass prop
318318

319319
Create a stateless React class.
320320

321+
#### `createClassStateless'`
322+
323+
``` purescript
324+
createClassStateless' :: forall props. (props -> Array ReactElement -> ReactElement) -> ReactClass props
325+
```
326+
327+
Create a stateless React class with children access.
328+
321329
#### `handle`
322330

323331
``` purescript

src/React.js

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,22 @@ function getRefs(this_) {
1919
}
2020
exports.getRefs = getRefs;
2121

22+
function childrenToArray(children) {
23+
var result = [];
24+
25+
React.Children.forEach(children, function(child){
26+
result.push(child);
27+
});
28+
29+
return result;
30+
}
31+
exports.childrenToArray = childrenToArray;
32+
2233
function getChildren(this_) {
2334
return function(){
2435
var children = this_.props.children;
2536

26-
var result = [];
27-
28-
React.Children.forEach(children, function(child){
29-
result.push(child);
30-
});
37+
var result = childrenToArray(children);
3138

3239
return result;
3340
};

src/React.purs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,7 @@ module React
5353

5454
, createClass
5555
, createClassStateless
56+
, createClassStateless'
5657
, createElement
5758
, createElementDynamic
5859
, createElementTagName
@@ -296,6 +297,10 @@ foreign import createClass :: forall props state eff. ReactSpec props state eff
296297
createClassStateless :: forall props. (props -> ReactElement) -> ReactClass props
297298
createClassStateless = unsafeCoerce
298299

300+
-- | Create a stateless React class with children access.
301+
createClassStateless' :: forall props. (props -> Array ReactElement -> ReactElement) -> ReactClass props
302+
createClassStateless' k = createClassStateless \props -> k props (childrenToArray (unsafeCoerce props).children)
303+
299304
-- | Create an event handler.
300305
foreign import handle :: forall eff ev props state result. (ev -> EventHandlerContext eff props state result) -> EventHandler ev
301306

@@ -313,3 +318,9 @@ foreign import createElementTagNameDynamic :: forall props. TagName -> props ->
313318

314319
-- | Create a factory from a React class.
315320
foreign import createFactory :: forall props. ReactClass props -> props -> ReactElement
321+
322+
-- | Internal representation for the children elements passed to a component
323+
foreign import data Children :: *
324+
325+
-- | Internal conversion function from children elements to an array of React elements
326+
foreign import childrenToArray :: Children -> Array React.ReactElement

0 commit comments

Comments
 (0)