是此功能递归



我可以在没有递归问题的情况下将handleMsghandleMsg内应用于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)

最新更新