はじめに
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
に設定したものが変わった瞬間にupdate
でchangeProperties
に変更されたプロパティの名前が取れるのでそこでfetchを行うようにしています
カイゼンする
update
を利用する場合、eventId
以外のプロパティがあった場合にそれが変わった際に、再レンダリングされてしまいます
そこでライフサイクルをみてみます
この図からshouldUpdate
を利用することで、eventIdが変更されたときのみ再レンダリングをするという最適化が可能になります
おわりに
Litで調べていたところドキュメントからよくわからずまとめてみました
よくやる操作かなと思ったので参考になると嬉しいです
参考