我可以在没有递归问题的情况下将handleMsg
从handleMsg
内应用于OnClick处理程序吗?
var state = 0;
var handleMsg = function(num) {
state = state + num;
render(
h("div", [
if ((state % 2) == 1) {
h("span", "the number is odd!"),
} else {
h("span", "the number is even!"),
}
h("button", {onclick: function(){ handleMsg(1) }}, "increment"),
h("button", {onclick: function(){ handleMsg(-1) }}, "decrement"),
])
);
};
与:
绑定onclick
时 {onclick: handleMsg(1)}
您正在分配调用可能导致无限递归的handleMsg
的结果。
我想您想在单击时调用此功能,因此请使用:
{onclick: () => handleMsg(1)}
没有箭头功能,可以使用:
{onclick: function () { handleMsg(1) }}
或as @dontvotemedown发布:
{onclick: handleMsg.bind(null, 1)}
我相信您可以,但是您需要更改点击事件的绑定方式。如果您喜欢这样,则handleMsg(1)
将在此处执行该功能,而不是在单击事件中执行。要用参数绑定函数,您必须使用.bind
:
onclick: handleMsg.bind(null, 1)