- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我有一个高阶组件,类似于以下简单定义,从 JavaScript 模块 ./hoc.js
导出:
export const withStrong =
Component => props =>
<strong> <Component ...props/> </strong>
HelloMessage
的组件, 这段 JavaScript 的等价物是什么:
import { withStrong } from './hoc.js';
const HelloMessage = ...
const StrongMessage = withStrong(HelloMessage);
ReactDOM.render(
<StrongMessage name="Joe" />,
document.getElementById('react-app')
);
最佳答案
TL;DR:
这应该与请求的 JavaScript 片段完全相同:
[@bs.module ./hoc.js]
external withStrong
: React.component('props) => React.component('props)
= "withStrong";
module HelloMessage = ...
module StrongMessage = {
include HelloMessage;
let make = withStrong(make);
};
ReactDOMRe.renderToElementWithId(
<StrongMessage name="Joe" />,
"react-app"
);
withStrong
只是一个功能。它恰好是一个接受并返回一个 react 组件的函数,这有点神秘,但它们实际上就像其他任何值一样只是值。我们可以像绑定(bind)普通函数一样绑定(bind)它。
[@bs.module ./hoc.js]
external withStrong : 'a => 'a = "withStrong";
component('props)
,所以这就是我们将使用的。
[@bs.module ./hoc.js]
external withStrong
: React.component('props) => React.component('props)
= "withStrong";
'props
参数和返回类型中的类型变量意味着我们将它们限制为相同。也就是说,返回的组件将具有与传入的完全相同的 props,这正是我们在这种情况下想要的。
let strongMessage = withStrong(HelloMessage.make);
strongMessage
因为我们必须写一些类似的东西
React.createElementVariadic(strongMessage, { "name": "Joe" }, [||]);
<StrongMessage name="Joe" />
React.createElementVariadic(
StrongMessage.make,
StrongMessage.makeProps(~name="Joe", ()),
[||]
);
StrongMessage
具有两个功能的模块,
make
和
makeProps
符合
React.createElementVariadic
的预期.
make
只是组件本身,所以这很简单。
makeProps
是一个函数,它接受 props 作为由
unit
终止的标记参数(因为 props 可能是可选的)并返回一个 js 对象。这也恰好是
[@bs.obj]
确实如此,这绝不是巧合。
module StrongMessage = {
let make = withStrong(HelloMessage.make);
[@bs.obj]
external makeProps
: (~name: string, unit) => {. "name" string }
= "";
}
makeProps
功能是有点烦人的拗口。幸运的是,在我们的例子中,包装组件的 props 与原始组件相同,因为
StrongMessage.makeProps
也没有必要。将等同于
HelloMessage.makeProps
.那我们就偷那个吧!现在我们有了
module StrongMessage = {
let make = withStrong(HelloMessage.make);
let makeProps = HelloMessage.makeProps;
}
include HelloMessage
我们可以放弃
makeProps
完全(感谢@bloodyowl,通过@idkjs,为此)。
module StrongMessage = {
include HelloMessage;
let make = withStrong(make);
}
include HelloMessage
将包括从
HelloMessage
导出的所有定义如
makeProps
, 还有
make
和其他任何东西。当您以这种方式包装组件时,这可能是您想要的,但请注意它会从包含的模块导入和重新导出所有内容,以防这不是您想要的。
ReactDOMRe.renderToElementWithId(
<StrongMessage name="Joe" />,
"react-app"
);
关于interop - 如何在 ReasonReact 中绑定(bind)和使用高阶组件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57641241/
我正在使用 Microsoft.Office.Interop.Outlook 提取电子邮件附件: var MAPI = new Application().GetNamespace("MAPI");
突然得到一个 System.invalidcastexception: unable to cast COM object of type 'system._object' to interface
我正在尝试在兼容的渲染目标上使用 Gdi 和 Direct 2D 来渲染位图。我使用 D2D1_COMPATIBLE_RENDER_TARGET_OPTIONS_GDI_COMPATIBLE 选项创建
完整错误: Could not load file or assembly 'Interop.Microsoft.Office.Interop.Word' or one of its dependen
我正在尝试寻找一种使用 Office.Interop.Outlook COM 对象连接到其他邮箱的方法。目前我正在执行以下操作(在添加 COM 对象之后): var app = new Microso
我有一个用 C# 编写的应用程序,该应用程序当前向 LDAP 进行身份验证。我们希望扩展功能以支持 IBM 的 Tivoli Access Manager,它由一个策略服务器和一个 LDAP 服务器(
在 Visual Studio 中将 interop.excel 引用添加到我的 C# winform 后,我无法再“编辑并继续”...... 错误提示“正在修改“方法” ' 包含嵌入式互操作类型/成
我正在尝试创建 Excel 文件的 Worksheet 数组,但找不到正确的转换。 这是代码: Excel.Application app = new Excel.Application(); Exc
我正在使用 C# Interop 从工作表中获取一些值,但出现以下错误: Non-invocable member 'Microsoft.Office.Interop.Excel.Range.End'
我在 MVC 桌面应用程序中使用 Nuget 包 System.Data.SQLite。当我尝试清理解决方案时出现错误。我收到的错误消息是:无法删除文件“...bin\Debug\x64\SQLite
序列化异常:程序集“Microsoft.Office.Interop.Excel,Version=11.0.0.0,Culture=neutral,PublicKeyToken=71e9bce111e
我正在通过命令行将 magento 2.1.8 升级到 2.3.3,当我运行 composer update 命令时它显示以下错误。 包 container-interop/container-int
我正在尝试从 C# 控制台应用程序中的 Excel 中捕获一些数据。 我得到了错误 Unable to cast COM object of type 'microsoft.Office.Intero
我收到一个错误: Unable to cast COM object of type 'Microsoft.Office.Interop.Excel.ApplicationClass' to inte
我刚刚下载了 MS Visual Studio 2010 解决方案并收到该错误。 Error 1 Assembly 'Microsoft.Office.Interop.Word, Version=15
我尝试为 socket.io 编写一个绑定(bind)。 我在使用函数(底部示例代码中的 next())时遇到问题,该函数要么不带参数,要么带有错误对象( Js.Exn.raiseError("ERR
在 C++/CLI 中,是否可以固定不包含元素的数组? 例如 array^ bytes = gcnew array(0); pin_ptr pin = &bytes[0]; //。您可以回退到 GCH
我目前正在从事一个项目,该项目包含几种不同的“编程”语言,每种语言都有自己的命名约定。应该始终使用相同的命名约定,还是应该在每种语言中使用不同的名称以具有原生外观(即不与框架的其余部分冲突)? 例如,
我是Clojure和Java的新手。 为了访问Clojure中的Java字段,您可以执行以下操作: Classname/staticField 就是一样的 (. Classname staticFie
我想提取word文档中的项目符号信息。我想要这样的东西:假设下面的文字在 word 文档中: 启动汽车的步骤: 开门 坐在里面 关上门 插入 key 等等 然后我想要我的文本文件如下: 启动汽车的步骤
我是一名优秀的程序员,十分优秀!