! 제품 버전을 정확하게 입력해 주세요.
제품 버전이 정확하게 기재되어 있지 않은 경우,
최신 버전을 기준으로 안내 드리므로
더욱 빠르고 명확한 안내를 위해
제품 버전을 정확하게 입력해 주세요!

React에서 그리드 이벤트 처리 > Q&A | 토론

본문 바로가기

ReactJS React에서 그리드 이벤트 처리

페이지 정보

작성자 그리드2 작성일 2023-12-27 13:35 조회 86회 댓글 0건
제품 버전 : 5.20211.781
컨트롤 이름 : FlexGrid

본문

그리드에서 row 선택이 변경될 때 마다 변경된 row 의 정보를 추출하여 처리를 하려고 합니다.


리액트에서 FlexGrid 컴포넌트를 사용하여 개발중인데

onSelectionChanging, selectionChanging 두 개 속성이 있는데 둘 중 어떤 props 를 이용해서 처리를 해야 하는지 답변 부탁드립니다.


그리고 selectionChanging 속성에 처리 함수를 지정할 경우 컴포넌트 내에 선언한 ref 값은 잘 조회가 되는데 state 값은 useState 선언 시  설정한 초기값 만 조회가 되고 변경된 값은 조회가 되지 않습니다. 

왜 ref 만 변경된 값이 잘 조회가 되고 state 값은 조회가 안되는지요?


// -- 샘플 코드

const [testState, setTestState] = useState("TEST");

const testRef = useRef("TEST");


useEffect(() => {

  setTestState("CHANGE");

  testRef.current = "CHANGE";

}, []);


<FlexGrid

  selectionChanging={(e) => {

    console.log("state=", testState); // 계속 TEST 로만 로그가 찍힘

    console.log("ref=", testRef.current); // 변경된 값으로 로그가 잘 나옴

  }}

>

  

</FlexGrid>

  

  • 페이스북으로 공유
  • 트위터로  공유
  • 링크 복사
  • 카카오톡으로 보내기

댓글목록

등록된 댓글이 없습니다.

1 답변

ReactJS Re: React에서 그리드 이벤트 처리

추천0 이 글을 추천하셨습니다 비추천0 채택채택

페이지 정보

작성자 MESCIUS루시 작성일 2024-01-02 13:34 댓글 2건

본문

안녕하세요 메시어스입니다.


문의하신 내용애 대해 답변 드립니다.


1. selectionChanging, onSelectionChanging 문의

=> 먼저 selectionChanging과 onSelectionChanging은 속성이 아닌 성격이 다른 이벤트와 메서드로, onSelectionChanging은 selectionChanging 이벤트를 일으키는 메서드이며 selectionChanging은 선택 변경 전에 발생하는 이벤트입니다. 단순하게 선택 변경 전에 작업을 수행하고 싶으신 경우, selectionChanging 이벤트를 이용하시면 됩니다.


- onSelectionChanging API 문서

- selectionChanging API 문서


2. useState의 값을 FlexGrid의 event 내에서 참조할 때 문의

=> 본사 개발팀에 확인해본 결과 해당 현상의 경우 React의 기능으로 먼저 아래 글을 참고하여 주시기 바랍니다.

- state and lifecycle


state 설정자는 상태의 새 값에 대한 정보를 수집하고 직접 데이터 저장소로 전송하지 않습니다. React 렌더러는 마이크로 작업과 함께 일정 간격으로 작업을 수행하며 setState를 호출한 후에도 해당 클로저에서 상태는 여전히 동일합니다. 상태는 다음 렌더에서 useState(…) 라인을 인터프리터가 다시 본 후에 할당됩니다.


따라서 적절하게 업데이트된 값을 가져오기 위해서 useRef를 이용해보시기 바랍니다.


다른 궁금한 점이 생기면 문의주시기 바랍니다.


감사합니다.

메시어스 드림


댓글목록

삭제된 댓글

그리드2 작성일

삭제된 댓글 입니다.

그리드2님의 댓글

그리드2 작성일

2번 답변에 대한 부분이 좀 헷갈렸는데 해당 현상이 일어나는 원인에 대해서 확인을 하였습니다.

Event 처리 함수는 최초 한번만 생성되어 이벤트 핸들러에 추가가 되고 그 이후로 state 값들이 변할 때 마다 함수가 새로 생성되어  다시 할당되지 않다 보니 내부에서 참조하는 값이 함수가 생성될 당시의 값들만 기억을 하고 있어 계속 최초값 만 로그에 나왔던 것 같습니다. 오래된 클로저 문제라고 하네요..

테스트 삼아 state 값이 변경될 때 마다 이벤트 처리 함수를 지우고 새로 add 해주니 변경된 state 값이 참조가 되긴 했지만... 효율적이진 않아 보입니다.

이벤트 처리 함수내에서는 state를 사용하지 말고 ref 값만 사용해서 개발을 해야 할 것 같네요.
도움 주셔서 감사합니다.

메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
메시어스 홈페이지를 통해 제품에 대해서 더 자세히 알아 보세요!
홈페이지 바로가기
이메일 : sales-kor@mescius.com | 전화 : 1670-0583 | 경기도 과천시 과천대로 7길 33, 디테크타워 B동 1107호 메시어스(주) 대표자 : 허경명 | 사업자등록번호 : 123-84-00981 | 통신판매업신고번호 : 2013-경기안양-00331 ⓒ 2024 MESCIUS inc. All rights reserved.