![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/UD9P7/btrMQCdBlkD/1SqlvKrt2jOY2lYxX2SUg1/img.png)
리액트의 내장 hook 중에 하나인 useEffect는 useState만큼이나 중요하고 또 자주 쓰이는데, useEffect의 실행 시점에 대해서 모호하게 알고있어 정확하게 짚고 넘어가야겠다 생각했다. useEffect에 전달된 콜백은 컴포넌트가 mount, update, unmount될 때 실행될 수 있는데, 각각의 경우 컴포넌트 내에서 어떤 순서로 실행되는지 확인해보기로 했다. 1️⃣ mount 될 때 useEffect 실행 시점 useEffect는 컴포넌트가 mount, update, unmount '될 때' 실행된다. 그런데 이 말이 조금 모호하다. 컴포넌트가 렌더링 되면서 함께 실행된다는 것일까, 렌더링 된 후에 실행된다는 것일까?🤔 결론부터 말하자면 useEffect의 실행은 컴포넌트의 렌더링..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/xxhEp/btrKHUniTjD/VzIIUdNp2kjyvhPPnOwcMk/img.png)
React 프로젝트와 firebase를 연결할 때 환경변수를 설정할 필요가 생겼다. 각종 key와 url을 숨기기 위함이다. 그래서 dotenv 라이브러리를 사용하기로 했다. dotenv는 환경 변수를 설정할 수 있도록 도와주는데, .env 파일을 만들고 그 안에 변수를 만들기만 하면 환경변수로 설정해주어 process.env 경로로 쉽게 꺼내어 사용할 수 있다. 예) .env 파일에 이렇게 설정해둔 후에 1 2 3 4 5 6 REACT_APP_API_KEY = value REACT_APP_AUTH_DOMAIN = value REACT_APP_PROJECT_ID = value REACT_APP_STORAGE_BUCKET = value REACT_APP_MESSAGING_SENDER_ID = value R..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/s6X2D/btrKIyYBNPU/z6ITgrS7xxyo189geApUGK/img.png)
List 컴포넌트에서 dummyList를 받아 화면에 표시하기 위해서, App 컴포넌트에서 list라는 이름으로 dummyList를 props로 넘겨주었다. const dummyList = [ { id: 1, content: 'test1', }, { id: 2, content: 'test2', }, { id: 3, content: 'test3', }, ]; function App() { return ( ); } export default App; const List = (list) => { return ( {list.map((i) => { return {i.content}; })} ); }; export default List; 그런데 이렇게 했을 때, TypeError: list.map is not a..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/RotYe/btrKLgiO1rR/kL65lDkNKBOlsg2LE9in9K/img.png)
1. 동기와 비동기 자바스크립트는 '단일 스레드' 기반의 언어이다. 이는 한 번에 하나의 작업 흐름만 가질 수 있다는 뜻이다. 그래서 자바스크립트는 기본적으로 '동기적' 방식으로 작업을 처리한다. function Hello() { console.log("Hello"); } Hello(); console.log("Bye"); 위의 예제를 실행하면, Hello가 먼저 출력된 후 Bye가 출력될 것이다. 이와같이 순차적으로 코드를 수행하며 하나의 작업이 끝난 뒤에 다음 작업을 수행하는 방식이 동기적 방식이다. 동기적 방식은 코드가 적힌 순서대로 실행되기때문에 실행 순서와 결과를 예측하기 쉽다는 장점이 있지만, 하나의 작업이 끝날 때까지 다른 작업을 수행할 수 없으므로, 하나의 작업 시간이 길어지게 될 때 전체..
![](http://i1.daumcdn.net/thumb/C148x148/?fname=https://blog.kakaocdn.net/dn/7PPaq/btrN8BKRIdQ/hbVyHYNfEB3Mrr7sWZ1E01/img.png)
좋은 기회로 출판에 도전해볼 수 있는 기회가 생겼다. 제주코딩베이스캠프의 대표님이시자 현재 수강 중인 멋쟁이 사자처럼 프론트엔드 스쿨의 강사님이신 호준님께서, 원한다면 출판의 길도 열려있음을 말씀해 주셨고, 나는 그 기회를 잡기로 했다. 출판에 참여하는 일은 오랫동안 해보고 싶었던 일이기도 하였고, 대단한 각오나 사명감을 가지고 하는 일은 아니지만, 누군가에게 도움이 될 수 있는 일이기도 하기 때문에 가치있다 생각했다. 어떤 주제의 책을 써야할까 고민을 많이 했다. 글로 쓰여진 말은 쉽게 사라지지 않기 때문에 말보다 무거운 법인데, 지금 내가 쓰려는 책은 지식을 전달하는 목적성까지 가지고 있기 때문에, 펜을 잡을 때 더욱 무거운 마음으로 임해야 함을 잘 알기 때문이다. 나조차도 초심자이기 때문에, 깊은 ..