Когда вызывается свойство lit-элемента `hasChanged`? - PullRequest
0 голосов
/ 14 января 2019

У меня есть простой элемент lit со свойством, которое имеет функцию hasChanged.

<html>
<head>
<meta charset="utf-8" /> 
</head>
<body>

<script type="module">
  import {LitElement, html} from 'https://unpkg.com/@polymer/lit-element@0.7.0/lit-element.js?module';

  class MyElement extends LitElement {

    static get properties() {
      return {
        mood: {
          type: String,
          hasChanged: function(value, oldValue) {
            console.log(oldValue, " -> ", value);
            return BOOLEAN; // <== replace with true or false
          }
        }
      };
    }

    constructor() {
      super();
      this.mood = 'default';
    }

    render() {
      return html`${this.mood}`;
    }

  }

  customElements.define('my-element', MyElement);
</script>

<my-element mood="explicit"></my-element>

</body>
</html>

Для отображаемого результата не имеет значения, заменяете ли вы BOOLEAN на true или false. Оба показывают explicit.

Но выходы журнала отличаются:

  • с true вы получите только одну строку:
undefined  ->  default
  • с false вы получите две строки:
undefined  ->  default
default  ->  explicit

Вывод журнала 'false' - это то, что я ожидал. С lit-element до 0.6.5 вы получаете те же две строки и возвращая true.

Это ошибка, появившаяся в lit-element 0.7.0 или новое поведение корректно? И если он действителен, почему второй вызов не выполняется путем возврата true из первого вызова.

1 Ответ

0 голосов
/ 15 января 2019

Это было сделано для оптимизации производительности и всегда устанавливало значение, установленное как атрибут, без вызова этой функции.

После первого обновления компонента эта функция вызывается всякий раз, когда устанавливается свойство. Вы можете сравнить старые и новые значения свойства и оценить, изменилось ли свойство.

Эта функция решает, произойдет ли обновление (возвращает true) или нет (возвращает false)

Дополнительная информация: https://lit -element.polymer-project.org / guide / properties # configure-property-changes

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...