====== 03.Stencilの@propと@state ====== Angularには、双方向データバインディングがあるのですが、Stencilには単方向データバインディングしかないです。 そのため、Stencilでは、フォームからの入力データを@state()で受け取り、何かに入れて、render()で表示するようにプログラミングする必要があります。 引用元:https://www.joshmorony.com/building-a-pwa-with-stencil-storage-and-services/ componentDidLoad() { const router = document.querySelector("ion-router"); // Refresh data every time view is entered router.addEventListener("ionRouteDidChange", async () => { const holdings = await Holdings.getHoldings(); this.holdings = [...holdings]; }); } ===== @prop()の解説のリンク ===== https://stenciljs.com/docs/properties Prop Decorator(公式ドキュメント) Props should be used to pass data down from the parent component to the child component. 親コンポーネント内のデータを、子コンポーネントに伝達するためには、親コンポーネント内でデータに@prop()というデコレータをつけて、エクスポートして、それを子コンポーネントで受けとるという作業が必要になります。 公式ドキュメントには以下のように記載させています。後で実際に試してみたいと思います。 親コンポーネント import { Prop } from '@stencil/core'; ... export class TodoList { @Prop() color: string; @Prop() favoriteNumber: number; @Prop() isSelected: boolean; @Prop() myHttpService: MyHttpService; } 子コンポーネントで、上記のcolorを受けとる方法 logColor() { console.log(this.color) } ===== @state()の解説のリンク ===== https://stenciljs.com/docs/state State Decorator(公式ドキュメント) 内容が変化する可能性のあるデータには、 @state()デコレータをつけるそうです。 Any changes to a @State() property will cause the components render function to be called again. @State() propertyが変更されるたびに、コンポーネントのrender関数が呼び出される(再描画される)。 https://www.joshmorony.com/building-a-pwa-with-stencil-storage-and-services/ では、 コンポーネント src/components/app-home/app-home.tsx で、 @State() holdings: Holding[] = []; と、holdingsに@State()をつけることで、 componentDidLoad() { const router = document.querySelector("ion-router"); // Refresh data every time view is entered router.addEventListener("ionRouteDidChange", async () => { const holdings = await Holdings.getHoldings(); this.holdings = [...holdings]; }); } により、ページのアドレスが変化するたびに、holdingsが再描画されて、表示されるものが最新のものになるようにしています。 ===== リンク ===== 目次:[[00.stencil:index.html|Webコンポーネント作成ツールStencil]] 前:[[00.stencil:02.stencilでlocalstorage利用のtodoアプリ|02.StencilでlocalStorage利用のTODOアプリ]] 次: