integrar datos dinámicos en react.js
hola tengo una tarjeta creada en reaccionar a la cual tengo que hacerla dinámica, he creado solo un componente, pero tengo varios datos para que se multiplique con los datos que envían
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;
Aquí les muestro mi código de la tarjeta, este se tiene que multiplicar toda la parte inferior de Menucon los datos que tengo que serían este
[
{
"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
}
]
Por ahora me han enviado solo un .text con datos igual al que he puesto, si alguien me pudiera ayudar a integrar esos datos a mi tarjeta y multiplicarlos con todos los datos que me envían, no se mucho sobre la integración, si no más diseño
Respuestas
Creo que está pidiendo un método para crear una tarjeta por elemento desde su archivo JSON, ¿correcto? Si es así, le recomiendo que tome todo lo relacionado con la fabricación de la tarjeta y la separe en su propio componente. Luego, puede volver a importarlo a su componente de aplicación, mapear sus datos desde su archivo JSON y crear su componente de tarjeta por iteración del ciclo. Se parecería al fragmento de código a continuación.
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;
Sé que no es una respuesta completa, pero espero que esto te lleve en la dirección correcta. Además, debe leer sobre el método del mapa (que no debe confundirse con el método del mapa) y cómo levantar el estado. Lo vincularé a los documentos a continuación ...
mapa: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map
estado de elevación: https://reactjs.org/docs/lifting-state-up.html