我可以在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"),
])
);
};
答案 0 :(得分:2)
将onclick
绑定到:
{onclick: handleMsg(1)}
您正在分配调用handleMsg
的结果,这可能会导致无限递归。
我想你想在点击时调用这个函数,所以用:
{onclick: () => handleMsg(1)}
没有箭头功能,可以通过以下方式完成:
{onclick: function () { handleMsg(1) }}
或@DontVoteMeDown发布:
{onclick: handleMsg.bind(null, 1)}
答案 1 :(得分:2)
我相信你可以,但你需要改变你绑定点击事件的方式。如果您喜欢这样,handleMsg(1)
将在那里执行该功能,而不是在click事件中执行。要使用参数绑定函数,必须使用.bind
:
onclick: handleMsg.bind(null, 1)