我有这个简单的组件
let component = ReasonReact.statelessComponent("Input");
let make = (~name, ~onChange, ~value, _children) => {
...component,
render: (_self) =>
<input
name=name
onChange={(_) => {
onChange(name, "change")
}}
value=value />
};
我试图像这样使用它
<Input
name="
placeholder="Your email"
onChange={self.reduce((name, value) => Change(name, value))}
label=""
value={self.state.email} />
但我在onChange
行
This is:
ReasonReact.Callback.t(string) (defined as (string) => unit)
But somewhere wanted:
(string, string) => unit
The incompatible parts:
unit
vs
(string) => unit
我想我理解错误,但我不知道要解决它。我还要像这样定义onChange
onChange={(name, value) => self.reduce((_, _) => Change(name, value))}
但是这次我得到了
This is:
ReasonReact.Callback.t('a) (defined as ('a) => unit)
But somewhere wanted:
unit
你知道如何解决它吗?是否可以在另一个回调函数中调用reduce
?
答案 0 :(得分:1)
reduce
采用1-ary函数并返回1-ary函数,但您的onChange
应该是2-ary函数。既然您似乎控制了这两方面,最简单的解决方法就是使用元组:
定义:
onChange={self.reduce(((name, value)) => Change(name, value))}
应用:
onChange={(_) => {
onChange((name, "change"))
}}
或者,如果您不控制回调的使用方式,您可以将其包装在您尝试的其他函数中,但由于reduce
返回一个函数,您必须明确地调用它:
onChange={(name, value) => self.reduce(() => Change(name, value))()}
注意:传递给 reduce
返回的回调的参数与将传递给传递给 {{1}的回调的参数相同},在这种情况下只是reduce
。但()
因此只相当于value => self.reduce(val => Action(val))(value)
。