Я пытаюсь отобразить изображение с каждым именем покемона в реакции. Я новичок, чтобы отреагировать, и не могу найти способ циклически перебрать список, чтобы отобразить правильное имя с правильным покемоном. Если я возьму "{test}" и вставлю число stati c в URL-адрес sr c, код работает нормально, отображая одно изображение, но я не могу найти способ обновить URL-адрес +1, чтобы отобразить правильное изображение с каждым именем покемона.
Мой код компонента:
import React from 'react';
import './card.styles.css';
export const Card = props => (
<div className = 'card-container'>
<img alt="monster"
{test = props.monster.url[36]}
src={`https://raw.githubusercontent.com/PokeAPI/sprites/master/sprites/pokemon/shiny/${test}.png`}
width='180'
/>
<h2> {props.monster.name} </h2>
<p>{props.monster.email}</p>
</div>
);
и мое приложение. js код:
import React, { Component } from 'react';
import {CardList} from './components/card-list/card-list.component.jsx';
import { SearchBox } from './components/search-box/search-box.component.jsx';
import './App.css';
class App extends Component {
constructor() {
super();
this.state = {
monsters: [],
searchField: ''
};
}
componentDidMount() {
fetch('http://pokeapi.co/api/v2/pokemon')
.then(response => response.json())
.then(pokemon => this.setState({ monsters: pokemon.results}));
}
handleChange = (e) => {
this.setState({searchField: e.target.value})
}
render() {
const { monsters, searchField} = this.state;
const filteredMonsters = monsters.filter(monster =>
monster.name.toLowerCase().includes(searchField.toLowerCase())
);
return (
<div className='App'>
<h1>Pokemon Rollodex</h1>
<SearchBox
placeholder='search monsters'
handleChange={this.handleChange}
/>
<CardList monsters={filteredMonsters}/>
</div>
);
}
}
export default App;
Код списка карт:
import React from 'react';
import { Card } from '../card/card.component';
import './card-list.styles.css';
export const CardList = props => (
<div className='card-list'>
{props.monsters.map(monster => (
<Card key ={monster.name} monster={monster} />
))}
</div>
);
Ответ API (имя и URL покемона):
(20) [{…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}, {…}]
0: {name: "bulbasaur", url: "https://pokeapi.co/api/v2/pokemon/1/"}
1: {name: "ivysaur", url: "https://pokeapi.co/api/v2/pokemon/2/"}
2: {name: "venusaur", url: "https://pokeapi.co/api/v2/pokemon/3/"}
3: {name: "charmander", url: "https://pokeapi.co/api/v2/pokemon/4/"}
4: {name: "charmeleon", url: "https://pokeapi.co/api/v2/pokemon/5/"}
5: {name: "charizard", url: "https://pokeapi.co/api/v2/pokemon/6/"}
6: {name: "squirtle", url: "https://pokeapi.co/api/v2/pokemon/7/"}
7: {name: "wartortle", url: "https://pokeapi.co/api/v2/pokemon/8/"}
8: {name: "blastoise", url: "https://pokeapi.co/api/v2/pokemon/9/"}
9: {name: "caterpie", url: "https://pokeapi.co/api/v2/pokemon/10/"}
10: {name: "metapod", url: "https://pokeapi.co/api/v2/pokemon/11/"}
11: {name: "butterfree", url: "https://pokeapi.co/api/v2/pokemon/12/"}
12: {name: "weedle", url: "https://pokeapi.co/api/v2/pokemon/13/"}
13: {name: "kakuna", url: "https://pokeapi.co/api/v2/pokemon/14/"}
14: {name: "beedrill", url: "https://pokeapi.co/api/v2/pokemon/15/"}
15: {name: "pidgey", url: "https://pokeapi.co/api/v2/pokemon/16/"}
16: {name: "pidgeotto", url: "https://pokeapi.co/api/v2/pokemon/17/"}
17: {name: "pidgeot", url: "https://pokeapi.co/api/v2/pokemon/18/"}
18: {name: "rattata", url: "https://pokeapi.co/api/v2/pokemon/19/"}
19: {name: "raticate", url: "https://pokeapi.co/api/v2/pokemon/20/"}
length: 20
__proto__: Array(0)