犬と猫の画像を表示する[LWC]
概要

LWCで犬と猫の画像を表示します。
犬の画像はDog APIから、猫の画像はThe Cat APIから取得します。
APIを使用するために「CSP 信頼済みサイト」の設定が必要です。


ソースコード
dogCatBoardLwc.html
<template>
<lightning-card>
<div class="slds-grid slds-einstein-header slds-card__header">
<header class="slds-media slds-media_center slds-has-flexi-truncate">
<div class="slds-grid slds-grid_vertical-align-center slds-size_3-of-4 slds-medium-size_2-of-3">
<h1 class="slds-truncate" title="お犬様とお猫様">
<span class="slds-text-heading_large">お犬様とお猫様</span>
</h1>
</div>
<div class="slds-einstein-header__figure slds-size_1-of-4 slds-medium-size_1-of-3"></div>
</header>
</div>
<div class="slds-align_absolute-center">
<div class="slds-m-top_large">
<header class="slds-align_absolute-center">
<div class="slds-button-group" role="group">
<lightning-button variant="neutral" label="今日のお犬様" onclick={petSearch} class="slds-text-heading_medium slds-p-around_small"></lightning-button>
<lightning-button variant="neutral" label="今日のお猫様" onclick={petSearch} class="slds-text-heading_medium slds-p-around_small"></lightning-button>
</div>
</header>
<c-dog-cat-img></c-dog-cat-img>
</div>
</div>
</lightning-card>
</template>
dogCatBoardLwc.Js
import { LightningElement } from 'lwc';
export default class DogCatPicLwc extends LightningElement {
petSearch(event) {
this.template.querySelector('c-dog-cat-img').petSearch(event);
}
}
dogCatBoardLwc.Js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<isExposed>true</isExposed>
<description>お犬様とお猫様LWC</description>
<targets>
<target>lightning__RecordPage</target>
<target>lightning__AppPage</target>
<target>lightning__HomePage</target>
</targets>
</LightningComponentBundle>
dogCatImg.html
<template>
<main class="slds-m-top_large">
<section class="pic-container">
</section>
</main>
</template>
dogCatImg.js
import { LightningElement, api } from 'lwc';
export default class DogCatPicLwc extends LightningElement {
dogUrl = 'https://dog.ceo/api/breeds/image/random'; // Dog API
catUrl = 'https://api.thecatapi.com/v1/images/search?format=json'; // The Cat API
petInfo;
// APIからペットの情報を取得する
requestPetInfo(baseUrl) {
fetch(baseUrl).then(response => response.json())
.then(data => {
this.petInfo = data;
})
.catch(err => console.log(err));
}
@api
petSearch(event) {
const container = this.template.querySelector('.pic-container');
if(event.currentTarget.label === '今日のお犬様') {
// Dog APIから犬の情報を取得する
this.requestPetInfo(this.dogUrl);
// 取得した犬の画像を追加する
setTimeout(function () {
container.innerHTML = `<img src="${this.petInfo.message}"/>`;
container.classList.add('slds-box');
container.classList.add('slds-m-bottom_medium');
}.bind(this), 1000);
} else {
// The Cat APIから猫の情報を取得する
this.requestPetInfo(this.catUrl);
// 取得した猫の画像を追加する
setTimeout(function () {
container.innerHTML = `<img src="${this.petInfo[0].url}"/>`;
container.classList.add('slds-box');
container.classList.add('slds-m-bottom_medium');
}.bind(this), 1000);
}
}
}
dogCatImg.Js-meta.xml
<?xml version="1.0" encoding="UTF-8"?>
<LightningComponentBundle xmlns="http://soap.sforce.com/2006/04/metadata">
<apiVersion>54.0</apiVersion>
<isExposed>false</isExposed>
</LightningComponentBundle>

