- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在学习 reasonml 并且对此感到非常兴奋。我在 typescript react 代码中经常做的事情是:
type Props = React.HTMLProps<HTMLButtonElement> & { foo: boolean }
const SuperButton: React.FC<Props> = (props) => <button {/* stuff with props */ />
在这方面,我作为组件库提供者向我的用户传达这个按钮扩展了普通的 HTML 按钮属性。
如何在我的组件中表达和扩展普通的 html 组件属性?
我看到 reason 明确不支持传播 props:https://github.com/reasonml/reason-react/blob/master/docs/props-spread.md .
我确实看到有一个组合策略:How to compose props across component in reason-react bindings? ,但不确定如何将它与普通的 HTML 元素组件结合起来。
有什么建议吗?谢谢!
最佳答案
正如 Amirali 暗示的那样,使用 ReasonReact.cloneElement
可以做类似的事情。这个想法是将组件的 Prop 和 HTML 按钮的 Prop 分成两个单独的组件参数,呈现按钮,然后克隆它,同时注入(inject)额外的按钮 Prop 。
This page显示了封装此克隆和注入(inject)功能的组件:
module Spread = {
[@react.component]
let make = (~props, ~children) =>
ReasonReact.cloneElement(children, ~props, [||]);
};
现在,您可以将此 Spread
组件用于您的 SuperButton
组件:
module SuperButton = {
[@react.component]
let make = (~foo, ~htmlButtonProps) =>
<Spread props=htmlButtonProps>
<button> (foo ? "YES" : "NO")->React.string </button>
</Spread>;
};
htmlButtonProps
属性将包含常规的 HTML 按钮属性,而单独的 foo
是您组件的特定属性。该组件可以这样使用:
<SuperButton foo=true htmlButtonProps={"autofocus": true} />
小内务注意事项:您实际上不需要使用 module
关键字定义模块。如果您愿意,可以将它们放在名为 Spread.re
和 SuperButton.re
的单独文件中。原因文件自动成为模块。
关于reason - 设计reasonml react组件时如何扩展HTML属性接口(interface)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62854705/
Closed. This question needs to be more focused。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅关注editing this post的一个问题。
我正在研究基于 this project 绑定(bind)到 leafletjs 的 bucklescript . 使用传单, map 具有添加图层的功能,图层具有将自身添加到 map 的功能。 这就
即使我在 ReasonML 中使用相同的类型,我也会收到类型不匹配。错误是: [1] We've found a bug for you! [1] /Users/gt/work/real-an
假设我有以下 Bucklescript 类型: type amqp; [@bs.val] external amqpLib: amqp = "Amqp"; [@bs.module] external
在 Python 中,我可以使用 import somemodule as foo 以便在脚本中为外部模块使用自定义名称。 这如何在 ReasonML 中完成,例如,如果我想将 ReasonReact
我对 Reason 很陌生。我有一个包含两个字符串的元组,我想制作一个 Map,其中的键属于该元组类型。 我应该怎么做? 最佳答案 Map.Make 是一个仿函数,这意味着它需要一个模块作为它的参数,
在 many 中“快速管道”运算符与“最后管道”的比较方式places暗示它们是彼此的直接替代品。想要将一个值作为函数的最后一个参数发送?最后使用管道 (|>)。想把它作为第一个参数发送?使用快速管道
我正在尝试用 reasonML 编写一个命令行工具。所以我在第一行插入了一个shebang(#! /usr/bin/env node),但是编译器编译失败。如何在编译输出中添加shebang? 最佳答
我一直在浏览 JS -> Reason cheatsheet on the Reason ML website .它们非常有用,但都没有涵盖现代 ES 中可用的 async/await 语法。 Rea
ReasonML ( https://reasonml.github.io/ ) 和 TypeScript ( https://www.typescriptlang.org/ ) 之间的权衡是什么?
我正在尝试为 https://github.com/oblador/react-native-keychain/blob/master/typings/react-native-keychain.d.
我正在学习 Reasonml,我在标准库中找不到任何功能,无论是 Bucklescript Js 模块。有没有比使用原始 javascript 更好的选择? 现在我正在用这个功能实现它: let pa
背景 我是 BuckleScript 的绝对初学者,虽然我以前用 npm 下载过包,但我从未编写过库。 目标:使用 npm 在我的项目中安装我的新包本地包 我正在尝试用 JavaScript 包装服务
在 F# 中,我们有 Computation Expressions ,在各种计算上下文(异步、可选等)中工作时可以减少样板和嵌套。 ReasonML 是否有这样的等价物? 如果是这样,语法是什么?
我正在尝试 Reason 并尝试使用正则表达式,但没有任何匹配项。 AFAIK Reason 没有任何特定的正则表达式相关的东西,所以我只是离开 OCaml 文档。 我的字符串看起来像: let na
假设我定义了以下类型: type queueParams = { durable: bool }; class type amqpChannelT = [@bs] { pub assertQu
例如,在 Ruby 中,您可以执行以下操作: list = ["foo", "bar", "baz", "qux", "quux", "corge"] result = list[2..4] 和 re
编译以下代码时出现错误 type shape = | Circle int | Square int | Rectangle int int; let myShape = Circle 1
我有一组 protobuf 类型,我想生成用于序列化的 reasonML 代码。到目前为止我发现的是 ocaml-protoc,它无法安装在我的系统上。使用 docker , FROM ocaml/o
我的意思是真正的原生,并且只有 iOS 线程,而不是具有原生线程和 JavaScript 线程的线程。 最佳答案 据我所知是的,检查例如 Gravitron ,@JaredForsyth 完全使用 R
我是一名优秀的程序员,十分优秀!