Мифрил: разница между vnode.attrs и vnode.state
В чем разница между vnode.attrs.value
а также vnode.state.value
при создании новых компонентов в Mithril?
1 ответ
Как указано в документации:
государственный
Объект, который сохраняется между перерисовками. Это обеспечивается основным двигателем при необходимости. В vnodes компонента POJO состояние наследуется прототипом от объекта / класса компонента. В компоненте класса vnodes это экземпляр класса. В компонентах замыкания это объект, возвращаемый замыканием.
Attrs
Хэш-карта атрибутов 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'})}})
Вывод покажет вам, что состояние инициализируется из конструктора компонента. Аттры вместо этого передаются от m().
Обычно вы можете использовать attrs для передачи данных объекту при использовании его в контексте (например, передача URL-адреса компоненту для использования в ajax). Вместо этого используйте состояние для сохранения локальных данных компонента при перерисовках (например, начальное состояние поля для сброса)