Here I have a useState for posts of my blog webapp. I am getting the posts from the mongoose back end which works fine. But the second I set the posts variable I get an infinite loop of rerendering.
Here is the app.jsx:
import React, {useState} from 'react';
import './App.css';
import Nav from './Navbar/NavBar.jsx';
import Content from "./content/Content"
import { getPosts } from "./api/post";
function App() {
const idList = ["631a58c165b3a10ac71497e1", "631a58fa65b3a10ac71497e3"];
const [posts, setPosts] = useState([]);
setPosts(async() => await getPosts(idList));
return (
<div>
hello
</div>
);
}
export default App;
Here is the axios part:
import axios from "axios";
const getPost = (id) => {
new Promise((resolve, reject) => {
const url = "/posts/" + id
console.log(url)
axios.get(url)
.then(response => {
if (response.status === 200){
console.log("Succesfull call");
console.log(response.data);
resolve(response.data);
}
else if(response.status === 404){
reject(response);
}
})
.catch(err => {
console.log("Failed call");
reject(err);
})
});
};
const getPosts = async (idList) => {
var result = []
for(const id in idList){
try{
let post = await getPost(idList[id]);
result.push(post);
}catch(err){
console.log(err.message);
}
}
if (result.length === 0) throw {message: "No posts"};
else return result;
};
export {getPosts};
How can I run setPosts async so that the site wont refresh infinitely?