I'm building my first ReactJS website converting an old website.
I need get the data from a server and then display it in 2 different part of my website.
In the old website I figured out how to do, but using React I've no idea.
I've tried to pass the data between the components using global.var, and it seemed to work until I do on the other component
return indirizzi.map(indirizzo => {
return (
<Indirizzo
key={indirizzo.Indirizzo}
Titolo={indirizzo.Indirizzo}
id={2}
/>
);
});
it gives the error:
TypeError: Cannot read property 'map' of undefined
This is the component that fetches data from the server.
/FullNavBar.js
import React, { useEffect, useState } from "react";
import Brand from "./Foto/Brand";
import NavBarItem from "./Elementi/NavBarItem";
import MenuIcon from "./Elementi/MenuIcon";
import "../App.css";
function FullNavBar() {
const [indirzzi, cambiaIndirizzi] = useState([]);
const fetchIndirizzi = async () => {
let indirizzi = await fetch(
"https://vps.lellovitiello.tk/Riassunty/API/indirizzi.php"
);
indirizzi = await indirizzi.json();
global.indirizzi = indirizzi;
cambiaIndirizzi(indirizzi);
console.log(indirizzi);
};
useEffect(fetchIndirizzi, []);
return (
<nav>
<Brand />
<div id="menu">
<div id="menu-toggle">
<MenuIcon />
</div>{" "}
<ul>
{" "}
{indirzzi.map((indirizzo, indice) => {
return (
<NavBarItem
key={indice}
indirizzo={indirizzo.Indirizzo}
indice={indice}
/>
);
})}{" "}
</ul>{" "}
</div>{" "}
</nav>
);
}
export default FullNavBar;
This is the component that should take te data from the first one and show them
/Indirizzi.js
import React, { useEffect, useState } from "react";
import { BrowserRouter as Router, Switch, Route } from "react-router-dom";
import Indirizzo from "./Indirizzo";
import "../App.css";
function Indirizzi() {
const [materie, cambiaMaterie] = useState([]);
const [indirizzi, cambiaIndirizzi] = useState([]);
const fetchMaterie = async () => {
let indirizzo = "Trasversale";
let materie = await fetch(
`https://vps.lellovitiello.tk/Riassunty/API/materie.php?indirizzo=${indirizzo}`
);
materie = await materie.json();
cambiaIndirizzi(global.indirizzi);
/*indirizzi = global.indirizzi;*/
cambiaMaterie(materie);
console.log(materie);
a();
};
const a = () => {
console.log(this);
};
useEffect(fetchMaterie, []);
return indirizzi.map(indirizzo => {
return (
<Indirizzo
key={indirizzo.Indirizzo}
Titolo={indirizzo.Indirizzo}
id={2}
/>
);
});
}
export default Indirizzi;
Can you please help me?