我正在尝试“理性反应”。当我尝试向其中一个组件添加密钥时,我遇到了一个问题。
我有一个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) 在Reason(和OCaml)中,有一种使用|>运算符传递参数的非传统方法.应该何时使用它的惯例是什么?我目前正在使用它只是因为我找到了它的新颖性.
我试图将一些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) 在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的新手,所以我可能会错过一些显而易见的事情。
有没有一种简单的方法可以使用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) 我正在寻找一个关于如何开始使用以下技术的快速示例:
让我开始一个执行以下操作的片段会很棒:
我已经有了基本的 ReasonML React 项目设置。
我正在研究基于这个项目的 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)
不幸的是,我收到一个未绑定的模块层错误。
如何让编译器知道后面描述的类型?
if(1<Array.length(Node.Process.argv)) {
Js.log("Too many arguments!");
}
Run Code Online (Sandbox Code Playgroud)
上面的 3 行 ReasonML 程序无法编译:
错误:未闭合的“(”(打开的第 1 行,第 2 列)
口齿不清的问题:怎么了?这是我对 ReasonML 的不满,因为我数了括号,它们确实匹配。
我一直在阅读 F# 文章,他们使用单个案例变体来创建不同的不兼容类型。但是在 Ocaml 中,我可以使用私有模块类型或抽象类型来创建不同的类型。在 Ocaml 中使用像 F# 或 Haskell 这样的单例变体是否很常见?
reason ×10
ocaml ×5
bucklescript ×4
reason-react ×2
bs-webapi ×1
conventions ×1
dependencies ×1
f# ×1
ffi ×1
html5-canvas ×1
lenses ×1
module ×1
object ×1
react-hooks ×1
rescript ×1
types ×1
unicode ×1