De réagir .la carte n'est pas une fonction
J'essaie d'apprendre à Réagir et je suis un novice quand il s'agit de Javascript. Maintenant, je travaille sur une application qui est de l'extraction de données provenant de Flickr API. Le problème est que lorsque j'essaie d'utiliser la méthode map sur les accessoires dans le Main.js composant, j'obtiens un message d'erreur disant: "Uncaught TypeError: ce.accessoires de jeu.des photos.la carte n'est pas une fonction". Après une recherche ici sur Stackoverflow, je pense que le problème est que cette.les accessoires sont des objets javascript et pas un tableau. Le problème est que je n'arrive pas à comprendre comment faire un tableau. Quelqu'un peut-il expliquer ce que je fais mal?
Mon code:
class App extends Component {
constructor() {
super();
this.state = {
}
}
componentDidMount() {
let apiKey = 'xxxxxxxxxxxxxxxxxx';
let searchKeyword = 'nature';
let url = `https://api.flickr.com/services/
rest/?api_key=${apiKey}&method=flickr.photos.
search&format=json&nojsoncallback=1&&per_page=50
&page=1&text=${searchKeyword}`;
fetch(url)
.then(response => response.json())
.then(data => data.photos.photo.map((x) => {
this.setState({
farm: x.farm,
id: x.id,
secret: x.secret,
server: x.server})
//console.log(this.state)
}))
}
render() {
return (
<div className="App">
<Header />
<Main img={this.state.photos} />
<Navigation />
</div>
);
}
}
export default class Main extends Component {
render() {
return(
<main className="main">
{console.log(this.props.photos)}
</main>
)
}
}
Edit:
Pourquoi est-ce.accessoires de jeu.img undefined premier?
Capture d'écran de la console.journal(ce.accessoires de jeu.img)
- qu'est-ce que
photo
?map
est une méthode deArray
. - "Je reçois une erreur en disant: "Uncaught TypeError: ce.accessoires de jeu.des photos.la carte n'est pas une fonction"'
this.props.photos.map
ne pas apparaître n'importe où dans votre code de la cité.data.photos.photo.map
n', vouliez-vous dire cela? - Séparément: Vous appelez
map
et à l'intérieur de lamap
rappel, vous appelezsetState
et ne retourne pas de valeur, si vous êtes à la cartographie de chaque entrée àundefined
; vous n'êtes pas à l'aide de la valeur de retour demap
à tous (vous êtes de retour, c'est hors dethen
, mais rien utilise l'résultant de la promesse, il en va non utilisés). Vous avez presque certainement ne voulez pas appeler à plusieurs reprisessetState
comme ça. - L'URL n'ont vraiment mais les sauts de ligne? Cela ne fonctionnerait pas correctement.
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe, c'est que votre carte en fonction de votre promesse est la réinitialisation de l'état du composant pour chaque photo qui est retourné. Si votre état sera toujours le dernier objet dans la liste de vos retourné photos.
Ici est un exemple simplifié de ce que je me réfère à
Ce que vous voulez faire est de cette
Pour ce que vous voulez accomplir, vous voulez que votre état d'être le résultat de la fonction map (depuis que renvoie un tableau des résultats à partir de la carte). Quelque chose comme ceci: