Мифрил: разница между 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). Вместо этого используйте состояние для сохранения локальных данных компонента при перерисовках (например, начальное состояние поля для сброса)

Другие вопросы по тегам