代码之家  ›  专栏  ›  技术社区  ›  yozawiratama

mithriljs组件状态未更新为回调或promise

  •  0
  • yozawiratama  · 技术社区  · 6 年前

    const Dashboard = () => {
        let ExpenseAmount = 0;
        let IncomeAmount = 0;
        let UserFullname = '';
    
        const getExpense = () => {
            ExpenseAmount = 1000;
        };
    
        const getIncome = () => {
            IncomeAmount = 2000;
        };
    
        const getUserFullname = () => {
            setTimeout(() => {
                console.log('calling fullname');
                UserFullname = 'Mike'; //<----
            }, 1000);
        }
    
        getUserFullname();
    
        return {
            view: () => [
                m("div", { class: "container-fluid flex-grow-1 container-p-y" }, [
                    m(
                        "h4",
                        {
                            class:
                                "media align-items-center font-weight-bold py-3 mb-4"
                        },
                        [
                            m("img", {
                                src: "assets/img/avatars/1.png",
                                class: "ui-w-50 rounded-circle"
                            }),
                            m("div", { class: "media-body ml-3" }, [
                                m("span", `Welcome back, ${UserFullname}!`),
                                m(
                                    "div",
                                    { class: "text-muted text-tiny mt-1" },
                                    m(
                                        "small",
                                        { class: "font-weight-normal" },
                                        `Today is ${new Date().toDateString()}`
                                    )
                                )
                            ])
                        ]
                    )
                ])
            ]
        };
    };
    

    我希望我能打电话 ajax 函数和它的回调/承诺将更新 UserFullname . 但它不起作用。我试着用setTimeout简化它,但还是不起作用。

    如何解决ajax调用、priomise或setTimeout中的更新状态?

    0 回复  |  直到 6 年前
        1
  •  1
  •   Barney    6 年前

    米特里尔 will not know to redraw 一旦数据发生变化-所以你需要打电话告诉它 m.redraw() 最后 getUserFullname 功能体。

    const getUserFullname = () => {
      setTimeout(() => {
        UserFullname = 'Mike';
      }, 1000);
    }
    

    你应该改为写:

    const getUserFullname = () => {
      setTimeout(() => {
        UserFullname = 'Mike';
    
        m.redraw();
      }, 1000);
    }
    

    Here's a working demo with the fix highlighted .