【发布时间】:2019-08-04 02:12:05
【问题描述】:
我正在学习理性反应,但无法呈现我从 json api 获取的项目列表。
let url = region => {
"https://api.openbrewerydb.org/breweries?by_state="
++ Js.String.replaceByRe([%re "/\\s/g"], "_", String.lowercase(region));
};
[@react.component]
let make = (~region) => {
let (breweries, setBreweries) = React.useState(() => []);
React.useEffect1(
() => {
Js.Promise.(
Axios.get(url(region))
|> then_(response => {
resolve(setBreweries(response##data));
})
);
None;
},
[|region|],
);
let renderBrewery = brw => <div> {ReasonReact.string(brw##name)} </div>;
<div>
{breweries |> List.map(renderBrewery) |> Array.of_list |> React.array}
</div>;
};
我正在取回我期望在 then_ 块中的数据。但是,当渲染项目时,我收到一个 JS 错误,提示 TypeError: brw is undefined,这意味着我收到的对象与我尝试渲染的对象之间存在差异。
【问题讨论】:
-
您如何知道您在
then_回调中收到了您期望的数据? -
@glennsl
Js.log块中的Js.log语句显示了我期望的数据 -
您通过网络获取 JSON 数据,无论您使用纯 JavaScript 还是 ReasonML,您都需要在尝试访问数据之前验证(解码)数据。在 ReasonML 中尝试github.com/ryb73/ppx_decco 是一种简单的方法。
标签: reason bucklescript reason-react