Whenever I sent the uploadsData variable from App.js into the <Gallery data={uploadsData}/>} /> component via a prop, it gets called more than one time.
Furthermore, whenever I hover over the blue !, I get that warning illustrated in the screenshot. This means I can never properly access this object properly.
How can I make so that it's executed once and only once so I can access the object in the proper way?
I thought having a [] in useEffect() (2nd param) as the dependency would cause pave the way for this to only be executed once?
Thanks in advance for taking the time to read. I'm open to any sort of feedback including code improvements/changes that are considered better practice
Here's App.js:
import { useEffect, useState } from 'react';
import { BrowserRouter as Router, Switch, Route, useHistory} from 'react-router-dom';
import ReactDOM from 'react-dom';
import '../../sass/HomePage/homePage.scss';
import LoginRegister from "./LoginRegister/LoginRegister";
import Gallery from "./Gallery/Gallery";
import Cookies from 'js-cookie';
const App = () => {
const [uploadsData, setUploadsData] = useState([]);
let { push } = useHistory();
let authToken = Cookies.get('token');
useEffect(() => {
getUploads();
},[]);
function getUploads() {
const headers = {
"Accept": 'application/json',
"Authorization": `Bearer ${authToken}`
}
axios.get('http://localhost:8005/api/get-uploads', {headers})
.then(resp => {
let uData = [...uploadsData,resp];
setUploadsData(uData);
if (authToken !== null) {
push('/gallery');
} else {
console.log("User's NOT authenticated, returning to login view");
push('/');
}
}).catch(error => {
console.log(error);
})
}
return (
<>
<Switch>
<Route exact path="/" component={LoginRegister} />
<Route component={() => <Gallery data={uploadsData}/>} />
</Switch>
</>
);
}
export default App;
if (document.getElementById('example')) {
ReactDOM.render(<Router><App/></Router>, document.getElementById('example'));
}
Here's Gallery.js:
import React from 'react';
const Gallery = (data) => {
return (
<>
{console.log(data)}
</>
);
}
export default Gallery;
