I am using react-grid-layout to make drag-drop and resize components
, So i am able to achieve the functionality as mentioned in the doc.
The Problem
- I am creating dynamic UI so I am rendering my UI with data.
- Here in this library I need to create layout like
{ {i: 'a', x: 0, y: 0, w: 1, h: 2}
- When I am creating static UI I am able to achieve what I want.Here is working code sandbox
in static Ui I have layout predefined
const layout = [
{ i: "a", x: 0, y: 0, w: 2, h: 1 },
{ i: "b", x: 2, y: 0, w: 2, h: 1 },
{ i: "c", x: 4, y: 0, w: 2, h: 1 },
{ i: "d", x: 6, y: 0, w: 2, h: 1 },
{ i: "e", x: 0, y: 2, w: 2, h: 1 }
];
<div className="App">
<GridLayout
className="layout"
layout={layout}
style=
>
{layout.map((li) => (
<div key={li.i} style=>
{li.i}
</div>
))}
</GridLayout>
This is working fine, But here the layout I have defined is static, So for this I searched and got one example with dynamic height and width, which is creating a dynamic layout.
But that is creating the layout with just random numbers which is not showing up with my UI (as per my use), This is what I found out in library for dynamic UI
What I am trying to do
I have this data as in my state
const [data1, setData] = useState({
EmpData: [
{
empId: 11,
lay1: { i: 'a' },
data: [
{
firstName: 'Steve',
lastName: 'Smith',
},
{
firstName: 'Michel',
lastName: 'Muner',
},
],
},
{
empId: 12,
lay1: { i: 'b' },
data: [
{
firstName: 'Charles',
lastName: 'Johnsen',
},
{
firstName: 'Glen',
lastName: 'Tyson',
},
],
},
{
empId: 13,
lay1: { i: 'c' },
data: [
{
firstName: 'Steve',
lastName: 'Smith',
},
{
firstName: 'Michel',
lastName: 'Muner',
},
],
},
{
empId: 14,
lay1: { i: 'd' },
data: [
{
firstName: 'Steve',
lastName: 'Smith',
},
{
firstName: 'Michel',
lastName: 'Muner',
},
],
},
{
empId: 15,
lay1: { i: 'e' },
data: [
{
firstName: 'Steve',
lastName: 'Smith',
},
{
firstName: 'Michel',
lastName: 'Muner',
},
],
},
],
});
By above data I am creating Ui as per my need
return data1.EmpData.map((li, index) => (
<div key={index.toString()} data-grid={index}"> </div> //what should I pass here as key and layout that I am not getting
<>
{li.data.map((l) => (
<>
<div>{l.firstName}</div>
<div>{l.lastName}</div>
</>
))}
</>
</div>
));
};
Passing key
and creating dynamic layout
is where I am not able to figure out how can I achieve this, as this is totally new thing to me.
My UI is totally dynamic Every time I am going to get dynamic data so that much cards or divs I need to show.
Here is my code sand box what I am trying to do dynamically
from How to create React-grid-layout with JSON data
No comments:
Post a Comment