본문 바로가기
반응형

분류 전체보기1062

리액트 Custom Hook - useRef로 useState 이전 값 저장하기 (usePrevious) 리액트 전체 링크 다음과 같이 바로 직전의 값을 저장하는 커스텀 훅을 만들어보자. useRef는 값이 바뀌어도 렌더링을 발생시키지 않고 현재 상태를 저장할 수 있다.const usePrevious = (value) => { const ref = useRef(); useEffect(() => { ref.current = value; }, [value]); return ref.current;}; 예를 들어, setCount로 count 값이 변경된다면, usePrevious는 count 값이 변경되기 전 값을 가지게 된다. const [count, setCount] = useState(0); const prevCount = usePrevious(count);.. 2024. 4. 15.
리액트, Node JS - 다른 클라이언트가 선택한 셀 표시하기 (Highlighting Cells Selected by Another Client) 리액트 전체 링크 Node JS 전체 링크 참고 - https://reactgrid.com/features - Socket.IO로 로그인 유저 관리하기 - module.css로 CSS 스타일 관리하기 - 스프레드시트 공동 작업하기 Project Settings - Handsontable에 Socket.IO 적용하기 - 변경된 셀만 데이터 전송해서 최적화하기 - 행 / 열 이동 및 크기 변경 연동하기 - 다른 클라이언트가 선택한 셀 표시하기 react-grid에는 공동 작업에 대한 셀 하이라이팅 기능을 제공한다. 아쉽게도 handsontable에는 해당 기능을 제공하지 않는다. 따라서 기존 기능을 이용해서 비슷하게 구현해 보자. 하이라이트 + 툴팁 만들기 먼저 임의의 셀의 테두리 색을 변경하고, toolt.. 2024. 4. 13.
리액트, Node JS - 행 / 열 이동 및 크기 변경 연동하기 (Sync Row / Column Movement and Size Adjustment) 리액트 전체 링크 Node JS 전체 링크 참고 - https://handsontable.com/docs/javascript-data-grid/api/hooks/#afterrowmove - 전치 행렬 구하기 - 스프레드시트 공동 작업하기 Project Settings - Handsontable에 Socket.IO 적용하기 - 변경된 셀만 데이터 전송해서 최적화하기 - 행 / 열 이동 및 크기 변경 연동하기 - 다른 클라이언트가 선택한 셀 표시하기 이제 행이나 열을 이동하거나, 삭제, 추가 그리고 크기 변경도 연동해 보자. 행 / 열 이동, 삭제, 추가 구현 afterRow / ColumnMove에는 여러 parameter가 있지만, 여기서는 movedRows / Columns와 finalIndex만 사용.. 2024. 4. 13.
리액트, Node JS - 변경된 셀만 데이터 전송해서 최적화하기 (Data Optimization with Socket.IO) 리액트 전체 링크 Node JS 전체 링크 참고 - 2차원 배열 빈 행 / 열 추가, 삭제하기 - 스프레드시트 공동 작업하기 Project Settings - Handsontable에 Socket.IO 적용하기 - 변경된 셀만 데이터 전송해서 최적화하기 - 행 / 열 이동 및 크기 변경 연동하기 - 다른 클라이언트가 선택한 셀 표시하기 이전 글에서 전체 데이터를 한 번에 서버로 전송하였다. afterChange: function (changes, source) { // changes : 변경된 데이터 정보, source : 변경을 발생시킨 원인 if (source === "loadData") return; console.log("Changed Data :", source, changes); socketI.. 2024. 4. 13.
리액트, Node JS - Handsontable에 Socket.IO 적용하기 (Handsontable with Socket.IO) 리액트 전체 링크 Node JS 전체 링크 참고 - Socket.IO로 Toast UI Editor 동시 편집하기 - 스프레드시트 공동 작업하기 Project Settings - Handsontable에 Socket.IO 적용하기 - 변경된 셀만 데이터 전송해서 최적화하기 - 행 / 열 이동 및 크기 변경 연동하기 - 다른 클라이언트가 선택한 셀 표시하기 Handsontable에 Socket.IO를 적용해서 편집된 데이터를 공유해 보자. Socket Server 소켓 서버는 Socket.IO로 Toast UI Editor 동시 편집하기와 동일하다. 기본적으로 전체 data를 broadcast로 전송하며, 최초 진입 클라이언트에게는 initData로 현재 데이터를 전송한다. const { Server } .. 2024. 4. 13.
리액트, Node JS - 스프레드시트 공동 작업하기 Project Settings (Real-Time Collaboration with Handsontable Spreadsheet) 리액트 전체 링크 Node JS 전체 링크 참고 - 로그인 + 채팅방 UI 만들기 - Hansontable Customizing with GitHub - https://forum.handsontable.com/t/is-there-a-feature-for-simultaneous-editing/7510 - 스프레드시트 공동 작업하기 Project Settings - Handsontable에 Socket.IO 적용하기 - 변경된 셀만 데이터 전송해서 최적화하기 - 행 / 열 이동 및 크기 변경 연동하기 - 다른 클라이언트가 선택한 셀 표시하기 다음과 같이 동시에 편집할 수 있는 스프레드 시트를 만들어보자. 그리고 다른 클라이언트가 작업하고 있는 셀의 정보도 알 수 있도록 하자. 주의 : handsontable.. 2024. 4. 13.
리액트 - Handsontable Context Menu 커스터마이징 (Fix Issue for Disappearing Comments) 리액트 전체 링크 참고 - https://forum.handsontable.com/t/comment-window-automatically-disappears/2822 - https://github.com/handsontable/handsontable/issues/5614 - https://handsontable.com/docs/react-data-grid/context-menu/ handsontable 6.2.2 ver에는 아래와 같이 셀이 많을 때, 메모가 사라져서 입력을 할 수 없는 버그가 있다. 다음과 같이 Custom Add Comment를 새로 만들어서 해결하자. Context Menu 커스터마이징 contextMenu를 true로 할 경우 마우스 오른쪽 버튼으로 컨텍스트 메뉴가 나온다. con.. 2024. 4. 12.
자바스크립트 - 전치 행렬 구하기 (Transpose 2D Array) 자바스크립트 전체 링크 다음과 같은 원본 배열이 있다고 가정하자. const originalArray = [ [1, 2, 3, 4, 5, 6], [7, 8, 9, 10, 11, 12], [13, 14, 15, 16, 17, 18], ]; 이 배열을 전치(transpose)해서 아래의 배열을 얻어보자. [ [ 1, 7, 13 ], [ 2, 8, 14 ], [ 3, 9, 15 ], [ 4, 10, 16 ], [ 5, 11, 17 ], [ 6, 12, 18 ] ] 코드는 다음과 같다. const transpose = (array) => { const rows = array.length; const cols = array[0].length; const transposedArray = []; for (let j .. 2024. 4. 10.
자바스크립트 - 2차원 배열 빈 행 / 열 추가, 삭제하기 자바스크립트 전체 링크 다음과 같은 배열에 빈 행/열을 추가하거나 삭제해보자. 주어지는 배열의 모든 행의 길이는 같다고 가정한다. const myArray = [ [1, 2, 3, 4, 5, 6, 7], [8, 9, 10, 11, 12, 13, 14], [15, 16, 17, 18, 19, 20, 21], [22, 23, 24, 25, 26, 27, 28], [29, 30, 31, 32, 33, 34, 35], ]; 행 추가 table의 rowIndex 부터 amount 만큼 행을 추가하는 메서드는 다음과 같다. emptyArray로 table row의 length만큼 빈 문자열로 이루어진 배열을 만들어서 추가하였다. const insertRows = (table, rowIndex, amount) => .. 2024. 4. 10.
반응형