javascript - mithriljs 组件状态不会更新回调或 promise

标签 javascript mithril.js

我使用这样的 mithriljs 组件状态:

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函数,并且它的回调/ promise 将更新UserFullname。 但这不起作用。我尝试用 setTimeout 简化它,但仍然不起作用。

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

谢谢

最佳答案

Mithril 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 .

关于javascript - mithriljs 组件状态不会更新回调或 promise ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57037871/

相关文章:

javascript - 为什么这个闭包和 IIFE 不起作用?

javascript - mitrill 组件加载后修改 html

javascript - 使用外部状态更改更新/重绘 Mithril 组件 View (Redux)

javascript - 当我从开头删除元素时,为什么 m.render() 不更新 View ?

javascript - 在JavaScript中,有没有一种方法可以推迟对Web套接字消息的处理,直到设置了标志?

javascript - Jquery Datepicker 仅限于另一个日期选择器的月份和年份

javascript - 为什么这个动态创建的元素没有绑定(bind)到事件?

javascript - 开发工具在 Electron 中的大小和位置

javascript - 在 Mithril 中动态添加路由和组件

javascript - 如何在 MithrilJS 中进行分页?