디바운스 - apply()
export default function debounce(fn, delay) { let timer = null; return function () { const context = this; const args = arguments; clearTimeout(timer); timer = setTimeout(() => { fn.apply(context, args); }, delay); }; }
- 여기서 this 가 왜 undefined 일까요 ?
일반함수호출(function foo(){ } )안에서 this는 전역객체이고 그럼 window 아닌가요..?
export default function debounce(fn, delay) { let timer = null; return function () { const context = this; console.log(this); // undefined const args = arguments; clearTimeout(timer); timer = setTimeout(() => { fn.apply(context, args); }, delay); }; }
- 이렇게
export default function debounce(fn, delay) { let timer = null; return function () { const args = arguments; clearTimeout(timer); timer = setTimeout(() => { fn.apply(null, args); //null 전달 }, delay); }; }
- 클로저를 사용해서 timer를 사용해야하는 이유..
네트워크탭보는 방법,,
커스텀이벤트 / 이벤트 델리게이션 (이예진)
App > SideBar > SideBarList
> EditPage > Editor 이런구조일때 Editor에서 이벤트가 발생해서 SideBarList의 render()를 호출하려고 할때,
App.js단에서 이벤트 델리게이션을 둘지, 커스텀 이벤트를 만들지 고민입니다!
어떤 방식으로 처리하는게 효율적인가요 ?
- 답변
에디터에서 전역에 이벤트를 올려서 사이드바쪽으로 내리는 것이 낫지 않을까 생각합니다
컴포넌트 갯수가 많아질 때는 전역 상태를 두고 이벤트가 발생한 곳에서 전역 상태를 변경하는 방법이 있다. 전역 상태가 변경되면 재렌더링하는 방식으로 구현하면 될 것 같다. ≒리덕스
간단한 것이라면 로컬 스토리지를 사용하면 되지만 굳이 추천은 하지 않는다. 컴포넌트 단에서 관리하게 하는 것이 낫다.
현재 노션 프로젝트를 진행하는데 console.log나 여타 주석 같은 부분이 많습니다. 혼자 코드를 작성할 때는 두고 PR할때만 지워서 올리면 되는지, 아니면 특정 기능이 구현되고 커밋할때마다 깔끔하게 정리를 하는게 나은지 여쭤보고싶습니다! (석주)
- 답변
커밋을 할 때마다 깔끔하게 정리하는 것이 좋다. 습관화를 해야 PR을 할 때 까먹지 않고 불필요한 혼동 상황이 없다. PR을 위한 주석은 비추천. 코멘트를 활용하자
innerHTML, insertAdjacentHTML, innerText, textContent
이중에 어떤 걸 사용하는게 좋을까요? 리액트와 같은 라이브러리를 사용할때도 이런 메소드가 사용되나요 ?
- 답변
리액트에서는 props와 같은 속성이 존재한다. dangerouslySetInnerHTML로 HTML 내부 요소를 추가 가능하다. https://ko.legacy.reactjs.org/docs/dom-elements.html
네 개 각각의 목적과 성능이 다른데 어떤 걸 사용해야 할까?
⇒ 크게 차이는 없다. 성능보다는 목적이나 선호도에 따라 결정하면 될 것 같다.
단일 객체 선택할 때 getElementById 사용하는 것처럼 대중적인 방식을 선택하면 좋을 것 같다.
보안 취약성에 대한 문제는 어떻게 해결하나요?
- 답변
XSS 공격 방식에 대한 대응방안을 찾아보는 것이 좋다.
fetch 최소화 방안
fetch로 서버 데이터 호출을 가급적 많이 하지 않는 쪽이 좋다고 배웠습니다. 하지만 노션 사이드 네비바에서 문서를 새로 만들 경우 api에서 문서를 생성하는 요청을 해야 하고 성공하면 해당 Response에서 id가 새로 부여되므로 호출이 불가피합니다. 로컬 스토리지나 다른 툴로 요청을 최소화 하는 방법이 있을까요? 아님 api 쪽에서 수정을 해야 하는걸까요?
⇒ 사용자 정보와 같은 민감 정보는 절대 저장하면 안된다. 그외의 정보들은 저장해서 사용하는것을 고려해본다.
예시) 로컬 스토리지는 토큰을 저장, 토큰으로 암호화 및 복호화해서 관리 및 파기가 쉽기 때문에 보안성을 높일 수 있다.
예외처리
코드를 짜면서 예외처리를 해야된다는 것을 계속 느끼고 있지만 예외처리를 어디서부터 어디까지 해야되는지 감이 잘 잡히지 않아 못하고 넘어가는 경우가 많습니다.. 혹시 이와 관련된 꿀팁이 있을까요!? 너무 추상적인 질문이라 죄송합니다😂
⇒ 예외가 많은 케이스는 당연히 해야겠죠? ^^ 네트워크 에외 이슈에 대한 예외처리가 특히 중요하다. 서버와 통신 시 에러 코드에 대한 방지 처리가 필요하다.
현업에서는 탈퇴 회원이어서 데이터가 없거나, 휴면 계정, 탈퇴 요청 계정 같은 경우는 네트워크 코드는 200 성공이나 정보가 올바르지 않으므로 이에 대한 핸들링이 필요하다.
네트워크 핸들링 함수를 공통으로 만들어서 해당 함수를 거쳐서 확인을 하는 방법도 있다.
새로고침 시 데이터 패치로 인한 UI 요소가 깜박이는 현상이 있습니다. 어떻게 해결할 수 있을까요?(익준)
⇒ 로딩 처리로 구현, 로딩 중인지에 대한 상태를 관리해서 렌더링을 바꾸면 된다.
리스트가 있는 부분을 조회를 한다고 하면 고정된 영역은 그대로 있게 하는 것이 좋다.
상태 관리 구현 복잡성(익준)
상태 관리 구현 시 컴포넌트가 많아지고 페이지도 많아지니 각 상황에 대한 상태 체크가 어렵습니다. console.log로 상태를 찍어보는 것 이외에 유용하게 상태 관리를 체크할 수 있는 방법이 있을까요?
⇒ 크롬 익스텐션이 있으니 활용해보는 것이 좋다.
리액트
https://chrome.google.com/webstore/detail/react-developer-tools/fmkadmapgofadopljbjfkapdkoienihi
뷰엑스