카테고리 없음

[ag-grid] valueSetter 할때 컴포넌트 리렌더링 되도록 하기

르라나 2020. 4. 15. 14:05

https://stackoverflow.com/questions/50697232/how-can-i-get-all-the-rows-of-ag-grid

 

How can I get all the rows of ag-grid?

ag-grid provides a way to get selected rows using api.getSelectedRows() function. And provides a way to set all rows using api.setRowData([]) function. I'm looking for something getAllRows() to ret...

stackoverflow.com

 

보통 리액트는 리렌더링의 조건 중 하나로 부모의 데이터가 바뀔 시 자식도 리렌더링이 된다. 이 경우 컴포넌트는 shallow 비교를 해서 부모에게서 받은 props가 변경전과 후가 같은지를 비교해서 같으면 렌더링을 하지 않을 수 있다.

ag-grid를 이용할 때, valueSetter 메서드를 이용해서 값을 변경할때마다 rowData 전체를 바꿔줘서 리렌더링이 되도록 하려고 했는데, 행 추가를 이용해서 이미 부모가 가진 rowData가 변경이 되었음에도 불구하고, valueSetter 메서드 내부에서는 rowData가 데이터 fetch되었을 때의 초기값 그대로였다.

 

그래서 valueSetter가 일어날때마다 rowData를 바꿔주려고 한 시도를 해봤는데 실패하다가 상단 블로그를 보고 gridApi의 메서드를 이용해서 gridApi를 통해서 실제 이 라이브러리가 가지고 있는 변경된 rowData를 가지고 부모가 가지고 있는 setRowData에 인자로 넣어주어서 리렌더링을 하도록 하였다. 

 

결과는 정상적으로 동작.

 

하지만 고민은, 코드가 썩... 썩이라는 것이다.