Ceci est mon premier essai dans une application React simple. Travailler avec l'API Openweather et AXIOS. J'ai suivi le cours de Stephen Grider sur Udemy et j'essaie de créer quelque chose par moi-même maintenant, mais j'ai toujours des problèmes lors de la transmission de données entre les composants. J'ai un composant SearchBar et j'aimerais pouvoir passer la valeur d'entrée à l'état du composant parent, donc je peux le mettre à jour avec chaque recherche et le rendre dans le DOM. Cependant, je continue à courir dans les erreurs. J'ai essayé de passer une fonction comme accessoire à mon composant SearchBar mais j'obtiens des erreurs:Réagir - transmettre des données entre les composants
setState (...): Ne peut mettre à jour qu'un composant monté ou monté. Cela signifie généralement que vous avez appelé setState() sur un composant non monté. C'est un no-op. Veuillez vérifier le code du composant App.
Citysearch n'est pas défini
Ceci est source de confusion pour moi, comme je l'ai essayé de copier les étapes exactes du cours, où il semble fonctionner très bien. Mais encore une fois, je suis très nouveau à ce sujet, donc c'est probablement juste moi faire une sorte d'erreur de débutant. Tous les conseils seraient très appréciés.
Vérifiez mon code ci-dessous:
app.js
import React, { Component } from 'react';
import './App.css';
//Libraries
import axios from 'axios';
//Components
import SearchBar from './Components/search-bar';
class App extends Component {
constructor(props){
super(props);
this.state = {
city: 'London',
country: 'uk',
temperature: 0,
humidity: 0,
pressure: 0
}
//Axios call
let city = this.state.city;
let country = this.state.country;
axios
.get(`http://api.openweathermap.org/data/2.5/weather?APPID=${API_KEY}&q=${city},${country}`)
.then(function(response) {
this.setState({
city: response.data.name,
country: response.data.name,
temperature: response.data.main.temp,
humidity: response.data.main.humidity,
pressure: response.data.main.pressure
});
}.bind(this))
.catch(function(error) {
console.log(error);
});
this.citySearch('London');
}
citySearch(city){
this.setState({city})
}
render() {
return (
<div className="container">
<h1 className="display-1 text-center">Weather App</h1>
<SearchBar onSearchTermChange={citySearch} />
</div>
);
}
}
export default App;
Monocomposant de SearchBar:
import React, { Component } from 'react';
class SearchBar extends Component {
constructor(props) {
super(props);
this.state = {
city: ""
};
}
render() {
return (
<input
value={this.state.city}
onChange={this.onHandleChange}
className="form-control mt-3"
placeholder="Enter a city name..."
type="text"
/>
);
}
onHandleChange(city) {
this.setState({ city });
this.props.onSearchTermChange(city);
}
}
export default SearchBar;
les axios appellent 'componentDidMount', pas le constructeur. vous pouvez juste 'this.state = {city: 'London'}' - n'utilisez pas setState ici. –
pourquoi faites-vous tout dans le constructeur –