LoginSignup
0
0

Lit Elementでattributeが変更されたら関数を実行したい

Posted at

はじめに

Lit Elementでattributeで渡されているプロパティの変更を検知するのに迷ったところがあったのでまとめます

やりたいこと

Web Componentsに渡しているAttributeであるeventIdが変更されたら、画面に表示されているメンバーリストを取得するfetchMemberByIdを再度実行して画面を再レンダリングしたいです

解決方法

ライフサイクルのupdateを利用することでうまくできました

sample.ts
@customElement('my-element')
export class MyElement extends LitElement {
  @property() eventId = '';

  updated(changedProperties) {
    changedProperties.forEach((oldValue, propName) => {
      if (propName === 'eventId') {
        this.fetchMemberById(this.eventId);
      }
    });
  }

変更はPropertyに設定したものが変わった瞬間にupdatechangePropertiesに変更されたプロパティの名前が取れるのでそこでfetchを行うようにしています

カイゼンする

updateを利用する場合、eventId以外のプロパティがあった場合にそれが変わった際に、再レンダリングされてしまいます

そこでライフサイクルをみてみます

image.png

この図からshouldUpdateを利用することで、eventIdが変更されたときのみ再レンダリングをするという最適化が可能になります

おわりに

Litで調べていたところドキュメントからよくわからずまとめてみました
よくやる操作かなと思ったので参考になると嬉しいです

参考

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0