Page 20 -
P. 20

1.1.1.1 초기 렌더링                                                                    1

                        어떤 UI 관련 프레임워크, 라이브러리를 사용하든지 간에 가장 처음 어떻게 보일지를 정하는 초
                        기 렌더링이 필요합니다. 리액트에서는 이를 다루는 render 함수가 있습니다.                                      리액트 시작


                          render() { ... }

                        이 함수는 컴포넌트가 어떻게 생겼는지 정의하는 역할을 합니다. 이 함수는 html 형식의 문자열을
                        반환하지 않고, 뷰가 어떻게 생겼고 어떻게 작동하는지 정보를 지닌 객체를 반환합니다. 컴포넌트

                        내부에는 또 다른 컴포넌트들이 들어갈 수 있습니다. 이때 render 함수를 실행하면 그 내부에 있
                        는 컴포넌트들도 재귀적으로 렌더링합니다. 이렇게 최상위 컴포넌트의 렌더링 작업이 끝나면 지
                        니고 있는 정보들을 사용하여 HTML 마크업(markup)을 만들고, 이를 우리가 정하는 실제 페이지
                        의 DOM 요소 안에 주입합니다.


                           그림 1-5 초기 렌더링
                              렌더링


                                                DOM
                            HTML 마크업
                                           주입
                           <div>…</div>


                        컴포넌트를 실제 페이지에 렌더링할 때는 분리된 두 가지 절차를 따르는데요. 먼저 문자열 형태의

                        HTML 코드를 생성한 후 특정 DOM에 해당 내용을 주입하면 이벤트가 적용됩니다.


                        1.1.1.2 조화 과정

                        리액트 라이브러리에서 중요한 부분인 업데이트를 어떻게 진행하는지 한번 알아봅시다. 우

                        선 리액트에서 뷰를 업데이트할 때는 “업데이트 과정을 거친다.”라고 하기보다는 “조화 과정
                        (reconciliation)을 거친다.”라고 하는 것이 더 정확한 표현입니다. 컴포넌트에서 데이터에 변화가 있
                        을 때 우리가 보기에는 변화에 따라 뷰가 변형되는 것처럼 보이지만, 사실은 새로운 요소로 갈아
                        끼우기 때문입니다.

                        이 작업 또한 render 함수가 맡아서 합니다. render 함수는 뷰가 어떻게 생겼고 어떻게 작동하는
                        지 객체를 반환한다고 했었죠? 컴포넌트는 데이터를 업데이트했을 때 단순히 업데이트한 값을 수

                        정하는 것이 아니라, 새로운 데이터를 가지고 render 함수를 또 다시 호출합니다. 그러면 그 데이
                        터를 지닌 뷰를 생성해 내겠죠?


                                                                                                      029




         리액트를 다루는 기술(본문출력용)0720.indb   29                                                       2018-07-20   오전 11:25:19
   15   16   17   18   19   20   21   22   23   24   25