mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Add example of getInitialProps to with-reasonml (#5975)
The current reasonml needs an example of how to do getInitialProps. tmepple posted the only known way of doing it in [this comment](https://github.com/zeit/next.js/issues/4202#issuecomment-439175214). It is unlikely reasonml users are going to discover that comment or figure it out on their own so having it in an example is critical. Also, dependencies updated. After updating dependencies, I get this error: ``` ModuleBuildError: Module build failed (from ./node_modules/next/dist/build/webpack/loaders/next-babel-loader.js): [1] Error: Cannot find module '@babel/core' [1] babel-loader@8 requires Babel 7.x (the package '@babel/core'). If you'd like to use Babel 6.x ('babel-core'), you should install 'babel-loader@7'. ``` Seems like @babel/core is required as peer dependency per [this comment](https://github.com/babel/gulp-babel/issues/124#issuecomment-326853222) so I added it. The way to do getInitialProps has changed in 7.0.2 canary so this also has a comment in the code about what change is required to get that working.
This commit is contained in:
parent
9a9e358911
commit
c4b9e079bf
1
examples/with-reasonml/.bsb.lock
Normal file
1
examples/with-reasonml/.bsb.lock
Normal file
|
@ -0,0 +1 @@
|
||||||
|
16836
|
|
@ -10,12 +10,13 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"babel-plugin-bucklescript": "^0.5.3",
|
"babel-plugin-bucklescript": "^0.5.3",
|
||||||
"next": "latest",
|
"next": "latest",
|
||||||
"react": "^16.4.2",
|
"react": "^16.7.0",
|
||||||
"react-dom": "^16.4.2",
|
"react-dom": "^16.7.0",
|
||||||
"reason-react": "^0.5.3"
|
"reason-react": "^0.5.3"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"bs-platform": "^4.0.5",
|
"@babel/core": "^7.2.2",
|
||||||
"concurrently": "^4.0.1"
|
"bs-platform": "^4.0.14",
|
||||||
|
"concurrently": "^4.1.0"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,13 +1,44 @@
|
||||||
let component = ReasonReact.statelessComponent("Index");
|
let component = ReasonReact.statelessComponent("Index");
|
||||||
|
|
||||||
let make = (_children) => {
|
let make = (~onServer, _children) => {
|
||||||
...component,
|
...component,
|
||||||
render: (_self) =>
|
render: _self =>
|
||||||
<div>
|
<div>
|
||||||
<Header />
|
<Header />
|
||||||
<p> (ReasonReact.string("HOME PAGE is here!")) </p>
|
<p>
|
||||||
|
{ReasonReact.string("HOME PAGE is here!")}
|
||||||
|
<br />
|
||||||
|
{ReasonReact.string("onServer: " ++ string_of_bool(onServer))}
|
||||||
|
</p>
|
||||||
<Counter />
|
<Counter />
|
||||||
</div>
|
</div>,
|
||||||
};
|
};
|
||||||
|
|
||||||
let default = ReasonReact.wrapReasonForJs(~component, (_jsProps) => make([||]));
|
let default = ReasonReact.wrapReasonForJs(~component, jsProps => make(~onServer=jsProps##onServer, [||]));
|
||||||
|
|
||||||
|
/* The way to do getInitialProps: https://github.com/zeit/next.js/issues/4202#issuecomment-439175214 */
|
||||||
|
let getInitialProps = context =>
|
||||||
|
Js.Promise.make((~resolve, ~reject as _) => {
|
||||||
|
let onServer =
|
||||||
|
switch (Js.Nullable.toOption(context##req)) {
|
||||||
|
| None => false
|
||||||
|
| Some(_) => true
|
||||||
|
};
|
||||||
|
resolve(. {"onServer": onServer});
|
||||||
|
});
|
||||||
|
|
||||||
|
/* In 7.0.2 canary, you must remove the Js.Promise.make wrapper */
|
||||||
|
/*
|
||||||
|
let getInitialProps = context => {
|
||||||
|
let onServer =
|
||||||
|
switch (Js.Nullable.toOption(context##req)) {
|
||||||
|
| None => false
|
||||||
|
| Some(_) => true
|
||||||
|
};
|
||||||
|
{"onServer": onServer};
|
||||||
|
};
|
||||||
|
*/
|
||||||
|
|
||||||
|
let inject = [%bs.raw {| (cls, fn) => cls.getInitialProps = fn |}];
|
||||||
|
|
||||||
|
inject(default, getInitialProps);
|
||||||
|
|
Loading…
Reference in a new issue