使用するAPI
今回はJSONPlaceholderというサービスのAPIを使います。
この中のtodoを取得してみます。
JSONPlaceholder
HTML
Alpine.jsだとJavaScriptもタグ中に埋め込む方法もありますが、今回はわけます。
<div x-data="app()" x-cloak> <div> <input type="text" x-model="input"> <button @click="handleFetch()">読み込み</button> </div> <p x-show="isLoading">読み込み中</p> <p x-show="error">データの取得に失敗しました。</p> <table x-show="Object.keys(data).length > 0"> <tr> <th>ID</th> <td x-text="data.id"></td> </tr> <tr> <th>title</th> <td x-text="data.title"></td> </tr> <tr> <th>userId</th> <td x-text="data.userId"></td> </tr> </table> </div>
CSSで[x-cloak]を非表示するとちらつき防止できます。
[x-cloak] { display: none }
JavaScript
Alpine.jsだとJavaScriptもタグ中に埋め込む方法もありますが、今回はわけます。
<script type="text/javascript"> document.addEventListener('alpine:init', () => { Alpine.data('app', () => ({ input: '', data: {}, error: false, isLoading: false, handleFetch() { this.isLoading = true; const requestId = this.input || '1'; fetch(`https://jsonplaceholder.typicode.com/todos/${requestId}`) .then(response => { if (! response.ok) { this.error = true; } return response.json(); }) .then(json => { this.isLoading = false; this.data = json; }) .catch(reason => { this.error = true; }); } })); }); </script>