秘银:vnode.attrs 和 vnode.state 的区别

Mot*_*lal 1 javascript mithril.js

在 Mithril 中创建新组件vnode.attrs.valuevnode.state.value在创建新组件时有什么区别?

Fab*_*oli 5

文档中所述

状态

在重绘之间持久化的对象。它在需要时由核心引擎提供。在 POJO 组件 vnodes 中,状态通常从组件对象/类继承。在类组件 vnodes 中,它是类的一个实例。在闭包组件中,它是闭包返回的对象。

属性

DOM 属性、事件、属性和生命周期方法的哈希图。

例如看看这个代码。

class Hello {
    
    constructor(height, width) {
      this.txt = 'from state'
    }

    view (vnode) {
            console.log(vnode.state)
        return m("main", [
            m("h1", {class: "title"}, "This come "+vnode.attrs.txt),
            m("h1", {class: "title"}, "This come "+vnode.state.txt)
        ])
    }
}

m.mount(root, {view: function () {return m(Hello, {txt: 'from attribute'})}})
Run Code Online (Sandbox Code Playgroud)

见小提琴

输出将显示状态是从组件构造函数初始化的。attrs 是从 m() 传递过来的。

通常,在上下文中使用数据时,您可以使用 attrs 将数据传递给对象(例如,将 URL 传递给组件以供 ajax 使用)。而是使用状态在重绘期间保留组件的本地数据(例如用于重置目的的字段初始状态)