integrare i dati dinamici in react.js
ciao ho una scheda creata in reazione a cui devo renderla dinamica, ho creato solo un componente, ma ho diversi dati in modo che venga moltiplicato con i dati che inviano
function App() {
const [open, setOpen] = useState(false);
const trigger = useRef(null);
useEffect(() => {
if (trigger.current) {
trigger.current.style.transition = "0.35s";
}
}, [trigger]);
function toggleOpen() {
if (trigger.current) {
setOpen((open) => !open);
if (open) {
trigger.current.style.webkitTransform = "rotate(0deg)";
} else {
trigger.current.style.webkitTransform = "rotate(180deg)";
}
}
}
const [metadata, setMetadata] = useState([]);
const data = response.json();
setMetadata(data);
return (
<div className="w-full ">
<Menu />
<div className="w-full flex justify-center px-4 py-3">
<div className="flex w-3/12 px-2 items-center">
<div className="w-24 p-2 bg-gray-300 mr-4 rounded">
<img src={logo} className="" alt="" />
</div>
<div className="flex flex-col justify-center ">
<p className="font-semibold my-0">{name}</p>
<p className="text-xs my-0">
{address}
</p>
</div>
</div>
<div className="flex w-1/6 justify-center items-center px-2">
<div className="w-4/5 h-10 bg-green-600 rounded text-white font-bold flex justify-center items-center">
<p className="my-0 text-lg">{percentage}</p>
</div>
</div>
<div className="flex w-1/12 justify-center">
<Chart />
</div>
<div className="flex w-1/6 justify-center items-center font-semibold">
<p className="my-0 text-lg">{visits}</p>
</div>
<div className="flex justify-center items-center font-semibold w-1/6">
<p className="my-0 text-lg">{conglomerations} Alertas</p>
</div>
<div className="flex justify-center items-center font-semibold w-1/6 ">
<p className="my-0 text-lg">{occupancy} Alertas</p>
</div>
<div className="card flex justify-center items-center w-1/6">
<Button className="mr-3">Analytics</Button>
<Button>Alerts</Button>
</div>
<div className="w-1/12 flex justify-center items-center">
<span
ref={trigger}
onClick={toggleOpen}
className=" w-4/12 flex justify-center items-center"
>
<BsChevronUp className=" text-2xl" />
</span>
</div>
</div>
<Info open={open} />
</div>
);
}
export default App;
Qui mostro il mio codice della carta, questo deve essere moltiplicato per tutta la parte inferiore Menucon i dati che ho che sarebbe questo
[
{
"name": "Samantha White",
"id": "484567489sda",
"address": "4116 Barton Creek Boulevard Austin, TX 78735 USA",
"logo": "https://sssssss.s3.amazonaws.com/ssss/express.png",
"occupancy": {
"capacity": 150,
"occupancy": 0,
"percentage": 0
},
"alerts": {
"conglomerations": 0,
"occupancy": 0
},
"visits": 2721
},
{
"name": "Jacqueline Wells",
"id": "sdasdx45616a4dsa5",
"address": "s15035 Highview Road Grand Junction, CO 81504 USA",
"store_logo": "ssssss.s3.amazonaws.com/ssss/lider.png",
"occupancy": {
"capacity": 150,
"occupancy": 0,
"percentage": 0
},
"alerts": {
"conglomerations": 0,
"occupancy": 0
},
"visits": 2069
}
]
Per ora mi hanno mandato solo un .testo con dati uguali a quello che ho inserito, se qualcuno potesse aiutarmi a integrare quei dati nella mia scheda e moltiplicarli con tutti i dati che mi mandano, non ne so molto sull'integrazione se non più layout
Risposte
Credo che tu stia chiedendo un metodo per creare una scheda per articolo dal tuo file JSON, corretto? Se è così ti consiglierei di prendere tutto ciò che riguarda la realizzazione della scheda e di separarlo dal suo componente. Quindi puoi importarlo di nuovo nel tuo componente App, mappare i tuoi dati dal tuo file JSON e creare il tuo componente carta per iterazione del loop. Assomiglierebbe allo snippet di codice di seguito.
function App() {
const [open, setOpen] = useState(false);
const trigger = useRef(null);
useEffect(() => {
if (trigger.current) {
trigger.current.style.transition = "0.35s";
}
}, [trigger]);
function toggleOpen() {
if (trigger.current) {
setOpen((open) => !open);
if (open) {
trigger.current.style.webkitTransform = "rotate(0deg)";
} else {
trigger.current.style.webkitTransform = "rotate(180deg)";
}
}
}
const [metadata, setMetadata] = useState([]);
const data = response.json();
setMetadata(data);
return (
<div className="w-full ">
<Menu />
{data.map(idx => (
<Card idx={idx.props} />
))}
<Info open={open} />
</div>
);
}
export default App;
So che non è una risposta completa, ma spero che questo ti porti nella giusta direzione. Inoltre, dovresti leggere il metodo map (da non confondere con il metodo Map) e come sollevare lo stato. Mi collegherò ai documenti di seguito ...
carta geografica: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
stato di sollevamento: https://reactjs.org/docs/lifting-state-up.html