I am trying to fetch the following results of my api (which is working well) http://localhost:5000/api/continents
{"data":[{"continentId":3,"CName":"Atlantis"},{"continentId":2,"CName":"Devias"},{"continentId":1,"CName":"Lorencia"}]}
into a react component (a simple array to begin with).
Endpoint code extracted from server.js:
app.get('/api/continents', (req, res) => {
connection.query(SELECT_ALL_CONTINENTS_QUERY, (err, results) => {
if(err){
return res.send(err)
}
else{
return res.json({
data: results
})
}
});
});
Here is my continents.js code:
import React, { Component } from 'react';
import './continents.css';
class Continents extends Component {
constructor() {
super();
this.state = {
continents: []
}
}
ComponentDidMount() {
fetch('http://localhost:5000/api/continents')
.then(res => res.json())
.then(continents => this.setState({continents}, () => console.log('Continents fetched..', continents)));
}
render() {
return (
<div>
<h2>Continents</h2>
</div>
);
}
}
export default Continents;
And here is the App.js code:
import React, { Component } from 'react';
import logo from './logo.svg';
import './App.css';
import Continents from './components/continents/continents';
class App extends Component {
render() {
return (
<div className="App">
<header className="App-header">
<img src={logo} className="App-logo" alt="logo" />
<h1 className="App-title">Developed with NodeJS + React</h1>
</header>
<Continents />
</div>
);
}
}
export default App;
Issue:
continents array is empty. No data fetched. However, there are no errors. I would very much appreciate if someone could guide me in the right direction to solve this. Thank you very much.
Advertisement
Answer
ComponentDidMount is a function so it shouldn’t be capitalized it should be: componentDidMount.
And you’re passing the incorrect value to the setState method, you should pass {continents: continents.data} instead of the continents object itself.
The corrected code:
componentDidMount() {
fetch('http://localhost:5000/api/continents')
.then(res => res.json())
.then(continents => this.setState({continents: continents.data}));
}