react-grid-layout으로 동적 드래그 앤 드롭 레이아웃을 만드는 방법

매니쉬 타쿠 르

나는 react-grid-layout사용 하여을 만들고 drag-drop and resize components있으므로 문서에 언급 된 기능을 얻을 수 있습니다.

내 문제

  • 동적 UI를 만들고 있으므로 데이터로 UI를 렌더링하고 있습니다.
  • 여기이 라이브러리에서 다음과 같은 레이아웃을 만들어야합니다. { {i: 'a', x: 0, y: 0, w: 1, h: 2}
  • 정적 UI를 만들 때 원하는 것을 얻을 수 있습니다. 다음은 작업 코드 샌드 박스입니다.

미리 정의 된 레이아웃이있는 정적 Ui에서 아래와 같이했습니다.

    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={{ backgroundColor: "blue" }}
  >
    {layout.map((li) => (
      <div key={li.i} style={{ backgroundColor: "yellow" }}>
        {li.i}
      </div>
    ))}
  </GridLayout>

이것은 잘 작동하지만 여기에서 정의한 레이아웃은 정적이므로이를 위해 동적 레이아웃을 만드는 동적 높이와 너비가있는 하나의 예제를 검색하고 얻었습니다.

그러나 그것은 내 UI에 표시되지 않는 난수만으로 레이아웃을 만드는 것입니다 (내 용도에 따라). 이것은 동적 UI에 대한 라이브러리에서 찾은 것입니다.

내가하려는 것

내 주와 같은 데이터가 있습니다.

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',
                },
            ],
        },
    ],
});

위의 데이터로 내 필요에 따라 Ui를 만들고 있습니다.

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>
    ));
};

key다이내믹을 전달 하고 생성 layout하는 것은 완전히 새로운 것이기 때문에 어떻게 이것을 달성 할 수 있는지 알 수없는 곳입니다.

내 UI는 완전히 동적입니다. 동적 데이터를 얻을 때마다 많은 카드 또는 div를 표시해야합니다.

다음은 동적으로 수행하려는 코드 샌드 박스입니다.

편집 / 업데이트

내가 얻은 대답 @Daniil Loban은 매우 유용하지만 실시간 데이터로 반복하려고 할 때 두 번 반복됩니다. 제 데이터가 여기에 표시된 것과 약간 다르기 때문에 발생합니다.

사실 저는 I use data1.EmpData[l.i] to get data to display when I map layout.이 대사 를 이해할 수 없습니다 .

내 데이터

    [
{
  compId: 5,
  company_name: "Info",
  comp_data: [
    {
      empId: 1,
      empName:"steve"
    },
    {
      empId: 2,
      empName:"meg"
    }
  ]
},
{
  compId: 6,
  company_name: "wipro",
  comp_data: [
    {
      empId: 11,
      empName:"mark"
    },
    {
      empId: 12,
      empName:"Tnml"
    }
  ]
}

]

  • 데이터는 회사-> 그 회사의 고용-> 그 회사의 데이터와 같습니다.
  • 따라서 여기에서 회사는 데이터에 대해 유사하게 여러 고용이 될 수 있습니다.
  • 이전 데이터에서 업데이트 한 내용은 최소한의 코드를 작성할 생각으로 회사에 대해 언급하지 않았습니다.
  • 지금 전체 코드를 추가했으며 여기에 내 코드 샌드 박스가 있습니다.

문제

  • 문제는 데이터를 반복하는 것입니다. 디스플레이에 중복 데이터가 표시됩니다.

  • 나는 company namme->companydata->employe name이것이 완벽해야한다고 여기에서 설명 할 것이다. 그러나 무슨 일이 일어나고 있는지는-companyname-> 한 div에서 둘 다 I a를 고용하고, 또 다른 div에서 나는 둘 다 얻는다

다음은 잘못된 데이터를 보여주는 이미지입니다.

Info하나의 그리드에서 하나는 고용하고 다른 하나는 다른 하나에서 고용하므로 두 가지 고용 이 있어야합니다 .

문제는 generateDOM레이아웃이 완벽하게 생성 되었기 때문에이 기능에 있습니다. 그러나 한 레이아웃에서는 다른 레이아웃에 대해서도 동일하게 반복됩니다. 길이가 3이면 완전히 괜찮은 3 개의 레이아웃을 생성하는 것입니다.하지만 한 레이아웃 안에는 반복해서 중복이 표시됩니다. 데이터

여기에 하나의 이미지를 첨부하여 UI에 어떻게 표시되어야하는지 이것은 내가 달성하려는 whaqt입니다.

다니 일 로반

문제는 레이아웃이 사용되지 않았고 lodash에서 임의의 잘못된 사용을 발견했다는 것입니다 (그러나 이것은 필수는 아닙니다)

data1.EmpData[l.i]매핑 할 때 표시 할 데이터를 가져 오는 데 사용 합니다 layout.

또한 동적 추가를위한 버튼이 있는 샌드 박스를 만들었 습니다. 이것이 여러분이 원했던 것이라고 생각합니다.

  const generateDOM = () => {
    // Generate items with properties from the layout, rather than pass the layout directly
    const layout = generateLayout();
    return _.map(layout, function (l) {
      return (
        <div key={l.i} data-grid={l} className="bg-success">
          <>
            <div className="rounded" key="?"></div>
            {data1.EmpData[l.i].data.map((l) => (
              <>
                <div>{l.firstName}</div>
                <div>{l.lastName}</div>
              </>
            ))}
          </>
        </div>
      );
    });
  };

업데이트 된 질문 :

여기에 이미지 설명 입력

  const generateDOM = (lo) => {
    // Generate items with properties from the layout, rather than pass the layout directly
    const layout = generateLayout();
    return _.map(layout, function (l) {
      return (
        <div key={l.i} data-grid={l} className="bg-success">
          <div>{lo[l.i].empName}</div>
          {console.log(lo, l, active_menu)}
        </div>
      );
    });
  };

그리고 우리가 렌더링 할 때 we don't need map, 단 하나의 호출 :

  return (
    <>
      {data1.map((d, ind) => (
        <div className={ind === active_menu ? "compNameActive" : "compName"}>
          <p onClick={() => compClick(ind)}>{d.company_name}</p>
        </div>
      ))}
      <ReactGridLayout onLayoutChange={onLayoutChange} {...props}>
        {generateDOM(data1[active_menu].comp_data)}
      </ReactGridLayout>
    </>
  );

sanbox2

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

Kendo Grid에서 드래그 앤 드롭하는 동안 드롭 대상을 시각적으로 식별하는 방법은 무엇입니까?

분류에서Dev

한 목록에서 드래그 앤 드롭으로 복사하지만 내부 드래그 앤 드롭에는 이동을 사용하는 방법

분류에서Dev

동일한 레이아웃에서 드래그 앤 드롭

분류에서Dev

ckeditor 이미지 업로드를 간단한 드래그 앤 드롭으로 만드는 방법

분류에서Dev

드래그 앤 드롭으로 잘못된 패널 이동

분류에서Dev

드래그 앤 드롭으로 JPanel에서 JTextArea 이동

분류에서Dev

Android에서 드래그 앤 드롭하는 동안 펄싱 원 애니메이션을 만드는 방법

분류에서Dev

Modernizr로 드래그 앤 드롭 감지 (파일 드래그 앤 드롭 아님)

분류에서Dev

Selenium IDE로 드래그 앤 드롭 동작을 테스트하는 방법은 무엇입니까?

분류에서Dev

실수로 드래그 앤 드롭을 실행 취소하는 방법

분류에서Dev

녹아웃 드래그 앤 드롭으로 인한 중복

분류에서Dev

React.js 파일 업로드 UI 드래그 앤 드롭이 작동하지 않음

분류에서Dev

ListWidget에서 ComboBox로 드래그 앤 드롭하는 방법

분류에서Dev

그리드 스냅, react-konva로 드래그 앤 드롭

분류에서Dev

iOS 드래그 앤 드롭. 드래그하는 동안 셀을 사용자 정의보기로 바꾸는 방법

분류에서Dev

Java GridLayout 그리드 레이아웃을 동적으로 변경하는 방법

분류에서Dev

드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

분류에서Dev

드래그 앤 드롭 후 레코드를 업데이트하는 방법

분류에서Dev

Xfce 데스크탑 (Thunar 1.6.2)에서 파일을 복사하는 대신 드래그 앤 드롭으로 이동하는 방법은 무엇입니까?

분류에서Dev

Xpages에서 응용 프로그램 레이아웃 컨트롤을 동적으로 만드는 방법

분류에서Dev

드래그 앤 드롭으로 Selenium WebDriver로 작업하는 방법

분류에서Dev

드래그 앤 드롭으로 각도 자동 스크롤

분류에서Dev

한 번의 클릭으로 자동 드래그 앤 드롭

분류에서Dev

드래그 앤 드롭으로 장바구니 값을 재설정하는 방법

분류에서Dev

Flutter : 드래그 앤 드롭 위젯을 스택 위젯에 동적으로 추가

분류에서Dev

안드로이드에서 트 리뷰 드래그 앤 드롭

분류에서Dev

안드로이드 드래그 앤 드롭 ImageView onTouchListener

분류에서Dev

파일 업로드시 Facebook 드래그 앤 드롭 기능을 구현하는 방법

분류에서Dev

Tinymce 편집기 위로 드래그하는 동안 jQuery 드래그 앤 드롭이 중단됨

Related 관련 기사

  1. 1

    Kendo Grid에서 드래그 앤 드롭하는 동안 드롭 대상을 시각적으로 식별하는 방법은 무엇입니까?

  2. 2

    한 목록에서 드래그 앤 드롭으로 복사하지만 내부 드래그 앤 드롭에는 이동을 사용하는 방법

  3. 3

    동일한 레이아웃에서 드래그 앤 드롭

  4. 4

    ckeditor 이미지 업로드를 간단한 드래그 앤 드롭으로 만드는 방법

  5. 5

    드래그 앤 드롭으로 잘못된 패널 이동

  6. 6

    드래그 앤 드롭으로 JPanel에서 JTextArea 이동

  7. 7

    Android에서 드래그 앤 드롭하는 동안 펄싱 원 애니메이션을 만드는 방법

  8. 8

    Modernizr로 드래그 앤 드롭 감지 (파일 드래그 앤 드롭 아님)

  9. 9

    Selenium IDE로 드래그 앤 드롭 동작을 테스트하는 방법은 무엇입니까?

  10. 10

    실수로 드래그 앤 드롭을 실행 취소하는 방법

  11. 11

    녹아웃 드래그 앤 드롭으로 인한 중복

  12. 12

    React.js 파일 업로드 UI 드래그 앤 드롭이 작동하지 않음

  13. 13

    ListWidget에서 ComboBox로 드래그 앤 드롭하는 방법

  14. 14

    그리드 스냅, react-konva로 드래그 앤 드롭

  15. 15

    iOS 드래그 앤 드롭. 드래그하는 동안 셀을 사용자 정의보기로 바꾸는 방법

  16. 16

    Java GridLayout 그리드 레이아웃을 동적으로 변경하는 방법

  17. 17

    드래그 앤 드롭으로 목록보기 항목을 한 목록에서 다른 목록으로 이동하는 방법은 무엇입니까? UWP C #

  18. 18

    드래그 앤 드롭 후 레코드를 업데이트하는 방법

  19. 19

    Xfce 데스크탑 (Thunar 1.6.2)에서 파일을 복사하는 대신 드래그 앤 드롭으로 이동하는 방법은 무엇입니까?

  20. 20

    Xpages에서 응용 프로그램 레이아웃 컨트롤을 동적으로 만드는 방법

  21. 21

    드래그 앤 드롭으로 Selenium WebDriver로 작업하는 방법

  22. 22

    드래그 앤 드롭으로 각도 자동 스크롤

  23. 23

    한 번의 클릭으로 자동 드래그 앤 드롭

  24. 24

    드래그 앤 드롭으로 장바구니 값을 재설정하는 방법

  25. 25

    Flutter : 드래그 앤 드롭 위젯을 스택 위젯에 동적으로 추가

  26. 26

    안드로이드에서 트 리뷰 드래그 앤 드롭

  27. 27

    안드로이드 드래그 앤 드롭 ImageView onTouchListener

  28. 28

    파일 업로드시 Facebook 드래그 앤 드롭 기능을 구현하는 방법

  29. 29

    Tinymce 편집기 위로 드래그하는 동안 jQuery 드래그 앤 드롭이 중단됨

뜨겁다태그

보관