我有一些我将在运行时获取的数据:
/* {id: 1, name: 'brad', age: 27, address: { city: 'city1', state: 'state1' } } */
let data = "{\"id\":1,\"name\":\"brad\",\"age\":27,\"address\":{\"city\":\"city1\",\"state\":\"state1\"}}";
Run Code Online (Sandbox Code Playgroud)
使用ReasonML和BuckleScript,我如何才能在表单中获取此数据:
type address = {
city: string,
state: string
};
type person = {
id: int,
name: string,
age: option int,
address: option address
};
Run Code Online (Sandbox Code Playgroud)
我提出的解决方案是100多行.
是否有可能不导出某些不应由包消费者直接使用的内部模块?
假设我有一个1 -> n关系:一个待办事项可以有很多(或零)个笔记,而一个笔记可以有零个或一个待办事项。我怎样才能在 ReasonML 中实现这种关系?(绑定外部库)
这是我目前所带来的(这当然不起作用)
module Note = {
module Attributes = {
[@bs.deriving abstract]
type t = {
[@bs.optional]
id: float,
[@bs.optional]
text: string,
[@bs.optional]
todo: Todo.Attributes.t,
};
};
};
module Todo = {
[@bs.deriving abstract]
type t = {
[@bs.optional]
id: float,
[@bs.optional]
title: string,
[@bs.optional]
completed: bool,
[@bs.optional]
notes: array(Note.Attributes.t),
};
};
let todo = Todo.Attribute.t(~title="hello");
Run Code Online (Sandbox Code Playgroud)
如果 Note 和 Todo 在一个文件中,并且在单独的文件中怎么办?
我正在为Javascript开发人员查看 Reason的第一个原因反应应用程序的示例
我看到他Js.Promise.resolve在使用时正在打电话bs-fetch:
RepoData.fetchRepos()
|> Js.Promise.then_(repoData => {
handleReposLoaded(repoData);
Js.Promise.resolve();
})
|> ignore;
Run Code Online (Sandbox Code Playgroud)
我在BuckleScript代码中也看到了类似的代码.例如在Bucklescript Cookbook中:
Js.Promise.(
Fetch.fetch "https://api.github.com/users/reasonml-community/repos"
|> then_ Fetch.Response.text
|> then_ (fun text ->
text
|> names
|> Array.iter Js.log
|> resolve)
|> ignore
Run Code Online (Sandbox Code Playgroud)
在JS中,我们通常resolve在创建新promise时调用,而不是在使用返回promise的函数时调用.那么为什么我们需要打电话给resolve上面的案例呢?
我正在尝试学习 ReasonML,并且我正在做一些公案来帮助我完成这项任务。我尝试编写的公案之一是在将列表转换为数组后询问列表的类型。我知道在某些语言中存在诸如 Haskell ( :t) 之类的运算符,我们可以在其中询问变量的类型。是否有任何相当于:tReasonML 的东西?或者检查是否Array.of_list返回数组是没有意义的,因为编译器确保......
我试图将一些JS转换为Reason,沿着我需要键入JSON响应的方式,并检查对象中是否存在键.
这是我目前的代码:
let api_key = "";
let api_url = "http://ws.audioscrobbler.com/2.0";
let method = "user.getRecentTracks";
let user = "montogeek";
type trackAttr = {
nowplaying: bool
};
type artistT = {
text: string
}
type trackT = {
attr: trackAttr,
name: string,
artist: artistT
};
type recentTrackT = {
track: array(Js.Dict.t(trackT))
};
type response = {
recenttracks: recentTrackT
};
Js.Promise.(Fetch.fetch(api_url ++ "?method=" ++ method ++ "&" ++ user ++ "=" ++ user ++ "&limit=1&format=json&api_key=" ++ api_key)
|> then_(Fetch.Response.json)
|> then_(json: response => …Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法可以使用ReasonReact插入表情符号?
在ReactJS中,您可以简单地输入表情符号并按预期方式呈现,但是在Reason中似乎并非如此。
如果您尝试这样做:
<span role="img" ariaHidden=true> {React.string("")} </span>
Run Code Online (Sandbox Code Playgroud)
它编译为:
React.createElement("span", {
"aria-hidden": true,
role: "img"
}, "\xf0\x9f\x92\xa9")
Run Code Online (Sandbox Code Playgroud)
呈现为:
ð©
编码表情符号的最佳方法是什么,以便ReasonReact可以按预期显示它们?
这个问题的答案说明了如何插入unicode,但是我对如何直接键入字符而无需查找每个unicode感兴趣。
以下警告是什么意思,如何解决原因?
Warning: Unimplemented primitive used:removeEventListener
Run Code Online (Sandbox Code Playgroud)
在
[@bs.val]
external addEventListener: (string, unit => unit) => unit = "addEventListener";
external removeEventListener: (string, unit => unit) => unit =
"removeEventListener";
...
React.useEffect(() => {
let handler = () => dispatch(ToggleMenu(false));
addEventListener("popstate", handler);
Some(() => removeEventListener("popstate", handler));
});
Run Code Online (Sandbox Code Playgroud) 我有一个JSON结构,其中包含period可以是对象或字符串的字段。我已经在代码中准备好了变体,并且可以正常工作:
type period = {
start: string,
end_: string,
};
type periodVariant =
| String(string)
| Period(period);
Run Code Online (Sandbox Code Playgroud)
问题是当我尝试将输入JSON转换为变量类型时:我只是不知道该怎么做。这是我的尝试:
let periodVariantDecode = (json: Js.Json.t): periodVariant => {
switch(json) {
| String(string) => String(Json.Decode.string(string))
| period => Period(Json.Decode.{
start: period |> field("start", string),
end_: period |> field("end", string),
})
};
};
Run Code Online (Sandbox Code Playgroud)
现在,当然是因为我想匹配的东西,是类型还是不行的Js.Json.t对抗String这是我的一部分periodVariant,但我不知道该如何实现我想要的。
假设我定义了以下类型:
type queueParams = {
durable: bool
};
class type amqpChannelT = [@bs] {
pub assertQueue: string => queueParams => Js.Promise.t(unit);
};
Run Code Online (Sandbox Code Playgroud)
然后调用以下内容:
channel##assertQueue("exampleQueue", {"durable": bool});
Run Code Online (Sandbox Code Playgroud)
结果是:
This has type:
{. "durable": bool}
But somewhere wanted:
queueParams (defined as
Run Code Online (Sandbox Code Playgroud)
我怎样才能传递正确的东西?为什么我传递的东西不是记录?点符号的含义是什么?