标签: reason

未绑定的记录字段ID错误

我正在尝试“理性反应”。当我尝试向其中一个组件添加密钥时,我遇到了一个问题。

我有一个TodoApp,它以TodoItem的列表作为状态。当我没有TodoItem的密钥时,该应用程序运行正常。但是,当我添加它时,出现编译错误。我在这里添加文件以供参考:

TodoItem.re:

type item = {
  id: int,
  title: string,
  completed: bool
};

let lastId = ref(0);

let newItem = () => {
  lastId := lastId^ + 1;
  {id: lastId^, title: "Click a button", completed: false}
};

let toString = ReasonReact.stringToElement;

let component = ReasonReact.statelessComponent("TodoItem");

let make = (~item, children) => {
  ...component,
  render: (self) =>
    <div className="item">
      <input _type="checkbox" checked=(Js.Boolean.to_js_boolean(item.completed)) />
      (toString(item.title))
    </div>
};
Run Code Online (Sandbox Code Playgroud)

TodoApp.re:

let toString = ReasonReact.stringToElement;

type state = {items: list(TodoItem.item)};

type action =
  | …
Run Code Online (Sandbox Code Playgroud)

ocaml type-inference reason

3
推荐指数
1
解决办法
3330
查看次数

何时使用管道|>与参数

在Reason(和OCaml)中,有一种使用|>运算符传递参数的非传统方法.应该何时使用它的惯例是什么?我目前正在使用它只是因为我找到了它的新颖性.

ocaml conventions reason

3
推荐指数
1
解决办法
366
查看次数

如何为Js.Dict.get使用Js.Dict.t类型

我试图将一些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)

types reason bucklescript

3
推荐指数
1
解决办法
340
查看次数

如果对象类型可扩展,我应该如何指向记录字段?

在Reason中思考一种在对象上定义简单镜头的方法。

我尝试..通过以下代码使用可扩展对象(在字段列表之前):

type hasName('a, 't) = {.. name: 't} as 'a;
type lens('s, 'v) = {
  get: 's => 'v,
  set: ('s, 'v) => 's,
};
let nameLens: lens(hasName('a, 't), 't) = {
  get: s => s.name,
  set: (s, v) => {...s, name: v},
}
Run Code Online (Sandbox Code Playgroud)

我收到“找不到记录字段名称”。错误,尽管类型hasName肯定应该有一个...我在这里做错了什么?

免责声明:我真的是Reason / OCaml的新手,所以我可能会错过一些显而易见的事情。

ocaml object lenses reason

3
推荐指数
1
解决办法
93
查看次数

如何使用ReasonReact显示表情符号?

有没有一种简单的方法可以使用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感兴趣。

unicode reason bucklescript reason-react

3
推荐指数
1
解决办法
60
查看次数

以下警告是什么意思?

以下警告是什么意思,如何解决原因?

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)

ffi reason bucklescript

3
推荐指数
1
解决办法
65
查看次数

使用 React Hooks 从 ReasonML 使用 HTML Canvas

我正在寻找一个关于如何开始使用以下技术的快速示例:

让我开始一个执行以下操作的片段会很棒:

  • 优雅且正确地管理对 HTML5 Canvas 元素的引用
  • 是一个简单的反应组件
  • 清除画布并绘制一些东西

我已经有了基本的 ReasonML React 项目设置。

html5-canvas reason reason-react bs-webapi react-hooks

2
推荐指数
1
解决办法
560
查看次数

ReasonML 循环依赖

我正在研究基于这个项目的 bucklescript 绑定到leafletjs 。

使用传单,地图具有添加图层的功能,而图层具有将自身添加到地图的功能。

这就是我想用 ReasonML 实现的目标:

module Map = {
    type t;
    [@bs.send] external addLayer : (t, Layer.t) => t = "addLayer";
};

module Layer = {
    type t;
    [@bs.send] external addTo : Map.t => unit = "addTo";
};
Run Code Online (Sandbox Code Playgroud)

不幸的是,我收到一个未绑定的模块层错误。

如何让编译器知道后面描述的类型?

dependencies ocaml module reason bucklescript

2
推荐指数
1
解决办法
249
查看次数

ReasonML:未闭合的“(”

if(1<Array.length(Node.Process.argv)) {
    Js.log("Too many arguments!");
}
Run Code Online (Sandbox Code Playgroud)

上面的 3 行 ReasonML 程序无法编译:

错误:未闭合的“(”(打开的第 1 行,第 2 列)

口齿不清的问题:怎么了?这是我对 ReasonML 的不满,因为我数了括号,它们确实匹配。

reason

2
推荐指数
1
解决办法
115
查看次数

Ocaml 中是否有单个案例变体的用例?

我一直在阅读 F# 文章,他们使用单个案例变体来创建不同的不兼容类型。但是在 Ocaml 中,我可以使用私有模块类型或抽象类型来创建不同的类型。在 Ocaml 中使用像 F# 或 Haskell 这样的单例变体是否很常见?

f# ocaml reason rescript

2
推荐指数
1
解决办法
164
查看次数