open
和模块前缀应该如何在 rescript 和 rescript-react 中工作。它似乎没有遵守文档。例如,我有一个文件阅读器模块
文件阅读器.res
module FileReader = {
type fileReader
type file = {"name": string, "lastModified": int, "size": int, "type__": string}
@new external createFileReader: unit => fileReader = "FileReader"
@bs.send
external readAsDataURL: (fileReader, file) => unit = "readAsDataURL"
let onload: (fileReader, string => unit) => unit = %raw(`
function (reader, cb) {
reader.onload = function (e) {
cb(e.target.result);
}
}
`)
let fileToDataUrl: (file, string => unit) => unit = (file, continue) => {
let reader = createFileReader()
onload(reader, continue)
readAsDataURL(reader, file)
}
}
我试图从反应组件中使用:
上传.res
open FileReader
let k = x => (_ => x)
let setState = stateHook => (newVal => stateHook(_ => newVal))
let firstFileFromEvent = event => ReactEvent.Form.target(event)["files"][0]
@react.component
let make = () => {
let (dataUrl, setDataUrl) = React.useState(k(""))
let setDataUrlState = setState(setDataUrl)
let fileOnChange = (event) =>
event ->
firstFileFromEvent ->
FileReader.fileToDataUrl(setDataUrlState)
<div>
<input type_="file" onChange=fileOnChange/>
<img src=dataUrl/>
</div>
}
让代码编译的唯一方法是
- 打开
- 使用模块名称引用
我的理解是你只需要做一个或另一个。如果我删除该open
语句,这是编译器的输出
我们为您发现了一个错误!
src/Upload.res:15:13-3613 ┆ 事件 -> 14 ┆ firstFileFromEvent -> 15 ┆<br /> FileReader.fileToDataUrl(setDataUrlState) 16 ┆ 17 ┆
在 FileReader 中找不到值 fileToDataUrl
添加 open 语句并将语句更改FileReader.fileToDataUrl(setDataUrlState)
为fileToDataUrl(setDataUrlState)
导致此异常:
我们为您发现了一个错误!
src/Upload.res:15:13-2513 ┆ 事件 -> 14 ┆ firstFileFromEvent -> 15 ┆<br /> fileToDataUrl(setDataUrlState) 16 ┆ 17 ┆
找不到值 fileToDataUrl
open
我在函数调用的语句和模块前缀中发布的源代码可以编译但有一个警告:
警告号 44
src/Upload.res:1:1-151 │ 打开 FileReader 2 │ 3 │ 让 k = x => (_ => x)
此 open 语句隐藏模块标识符 FileReader(稍后使用)
我在 Mac 上;使用rescript 9.1.4;