如何使用 LitElement 组件正确处理道具更改?

How to properly handle a prop change with a LitElement component?

我的场景: 我有一个使用 LitElement 创建的 Web 组件,它有一个对象 属性。 为了初始化它,我正在等待创建元素:

    <script>
      document.addEventListener("DOMContentLoaded", () => {
        const instance = document.querySelector("#myInstance");
        instance.config = {
          data: [
            { firstName: "John", lastName: "Doe", age: 32 },
            { firstName: "Jane", lastName: "Boe", age: 30 },
          ]
        };
      });
    </script>
    <my-component id="myInstance"></my-component>

假设我会不时更改此 data 道具。 我想在 data 更改后检查它的值,然后决定下一步我应该做什么。为此,这是我的网络组件的代码:

@customElement("my-component")
export class MyComponent extends LitElement {
  @property({ type: Object }) data: Object;

  protected updated(_changedProperties: Map<PropertyKey, unknown>): void {
    console.log(_changedProperties);
  }

  render() {
      return html`
        <div>blabla</div>
      `;
  }
}

问题是 _changedProperties 地图有 data 但它仍然未定义。 我在这里错过了什么?

changedProperties 是所有已更改的 属性 名称的映射...例如您可以使用它来检查更改的内容 - 如果您想访问实际值,您可以直接使用 属性。

看起来像这样

if (_changedProperties.has('myProperty')) {
  // react to a myProperty change
  console.log('The new value of myProperty is', this.myProperty);
}