是否可以在回调函数中使用 reduce ?
Is it possible to use reduce in a callback function?
我有这个简单的组件
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
?
reduce
采用一元函数,returns 采用一元函数,但你的 onChange
应该是二元函数。因为你似乎控制了这两个方面,最简单的解决方法是只使用一个元组:
定义:
onChange={self.reduce(((name, value)) => Change(name, value))}
申请:
onChange={(_) => {
onChange((name, "change"))
}}
或者,如果您不控制回调的使用方式,您可以像您尝试的那样将其包装在另一个函数中,但是由于 reduce
returns 您必须显式调用一个函数它:
onChange={(name, value) => self.reduce(() => Change(name, value))()}
注意:您传递给 reduce
返回的回调的参数与将传递给 传递给[的回调的参数相同=33=] reduce
,在本例中只是 ()
。但是 value => self.reduce(val => Action(val))(value)
因此等同于只做 self.reduce(val => Action(val))
.
我有这个简单的组件
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
?
reduce
采用一元函数,returns 采用一元函数,但你的 onChange
应该是二元函数。因为你似乎控制了这两个方面,最简单的解决方法是只使用一个元组:
定义:
onChange={self.reduce(((name, value)) => Change(name, value))}
申请:
onChange={(_) => {
onChange((name, "change"))
}}
或者,如果您不控制回调的使用方式,您可以像您尝试的那样将其包装在另一个函数中,但是由于 reduce
returns 您必须显式调用一个函数它:
onChange={(name, value) => self.reduce(() => Change(name, value))()}
注意:您传递给 reduce
返回的回调的参数与将传递给 传递给[的回调的参数相同=33=] reduce
,在本例中只是 ()
。但是 value => self.reduce(val => Action(val))(value)
因此等同于只做 self.reduce(val => Action(val))
.