reason-react-brunch
Version:
React bindings for Reason, modified to work with brunch and bucklescript
51 lines (43 loc) • 1.34 kB
Markdown
---
title: ReactJS using ReasonReact
---
`PageReason.re`:
```reason
/* ReasonReact used by ReactJS */
/* This is just a normal stateless component. The only change you need to turn
it into a ReactJS-compatible component is the wrapReasonForJs call below */
let component = ReasonReact.statelessComponent("PageReason");
let make = (~message, ~extraGreeting=?, _children) => {
...component,
render: _self => {
let greeting =
switch (extraGreeting) {
| None => "How are you?"
| Some(g) => g
};
<div> <MyBannerRe show=true message={message ++ " " ++ greeting} /> </div>;
},
};
/* The following exposes a `jsComponent` that the ReactJS side can use as
require('greetingRe.js').jsComponent */
[@bs.deriving abstract]
type jsProps = {
message: string,
extraGreeting: Js.nullable(string),
};
/* if **you know what you're doing** and have
the correct babel/webpack setup, you can also do `let default = ...` and use it
on the JS side as a default export. */
let jsComponent =
ReasonReact.wrapReasonForJs(~component, jsProps =>
make(
~message=jsProps |. message,
~extraGreeting=?Js.Nullable.toOption(jsProps |. extraGreeting),
[||],
)
);
```
Then use it on the JS side through
```javascript
var PageReason = require('path/to/PageReason.js').jsComponent;
```