forked from TechBowl-japan/react-stations
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathDogListContainer.jsx
49 lines (42 loc) · 1.37 KB
/
DogListContainer.jsx
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
// @ts-check
import React, { useEffect, useState } from 'react';
import BreedsSelect from './BreedsSelect';
import DogImage from './DogImage';
export const DogListContainer = () => {
const [breeds, setBreeds] = useState([]);
const [selectedBreed, setSelectedBreed] = useState('');
const [dogImages, setDogImages] = useState([]);
useEffect(() => {
fetchDogList();
}, []);
const fetchDogList = () => {
fetch('https://dog.ceo/api/breeds/list/all')
.then(response => response.json())
.then(data => {
const breedList = Object.keys(data.message);
setBreeds(breedList);
})
.catch(error => console.error('Error fetching dog image:', error));
};
const handleBreedChange = (event) => {
setSelectedBreed(event.target.value);
}
const fetchDogImages = () => {
fetch(`https://dog.ceo/api/breed/${selectedBreed}/images/random/12`)
.then(response => response.json())
.then(data => setDogImages(data.message))
.catch(error => console.error('Error fetching dog images:', error));
}
return (
<div>
<BreedsSelect breeds={breeds} selectedBreed={selectedBreed} onChange={handleBreedChange} />
<button onClick={fetchDogImages}>表示</button>
<div>
{dogImages.map((image) => (
<DogImage imageUrl={image} />
))}
</div>
</div>
);
}
export default DogListContainer