我对ReasonML非常陌生。我能够使用ReasonReact成功创建一个无状态组件,但是我还没有弄清楚如何向该组件添加自定义方法(例如Next.js的staticgetInitialProps
)。
尝试getInitialProps
在组件上定义方法时,出现The field getInitialProps does not belong to type ReasonReact.componentSpec
错误。
我应该如何在React组件上添加此定义此自定义方法的方法?
零件
let str = ReasonReact.stringToElement;
let component = ReasonReact.statelessComponent("Index");
let make = (~items: Listings.items, _children) => {
...component,
getInitialProps: () =>
Js.Promise.(
Endpoints.fetchListings()
|> then_(Fetch.Response.json)
|> then_((json) => Js.Json.decodeArray(json) |> resolve)
),
render: (_self) =>
<div>
(List.length(items) > 0 ? <Listings items /> : <Loading />)
</div>
};
let default =
ReasonReact.wrapReasonForJs(
~component,
(jsProps) => make(~items=jsProps##items, [||])
);
错误
We've found a bug for you!
/Users/davidcalhoun/Sites/web/evergreen-roots/pages/Index.re 7:3-17
5 │ let make = (~items: Listings.items, _children) => {
6 │ ...component,
7 │ getInitialProps: () =>
8 │ Js.Promise.(
9 │ Endpoints.fetchListings()
This record expression is expected to have type
ReasonReact.componentSpec ('a, 'b, 'c, 'd, 'e)
The field getInitialProps does not belong to type ReasonReact.componentSpec
我想在我的理性Next.js页面中获取上下文,并找到了解决方案。这是访问上下文以检测我们是否正在服务器上渲染并将布尔值传递给您的ReasonReact组件的示例:
〜https://github.com/zeit/next.js/issues/4202#issuecomment-439175214 所有信贷@tmepple和@ -rase谁张贴的解决方案有!
另一种解决方案是将“ _app.js”保留为纯js,然后从该getInitialProps中传递内容,这些
<Component someParam=manualStuff {...pageProps} />
内容可以作为参数输入到您的原因反应页面中。