Page 7 -
P. 7

이 책의 구성                            });
                                                              </script>
                                                              <template>
                                                                <div>
                                                                  <input v-model="message" placeholder="메시지를 입력하세요." />
                                                                  <p ref="messageParagraph">{{ message }}</p>
                                                                </div>
                     코딩을 처음 배우는 사람도 자세한 설명과 친절한 지시선으로 막힘없이 따라 할 수 있습니다.
                                                              </template>
                     기본 설명 외에도 팁, 노트, 조언 등을 적재적소에 배치해 완벽한 자율학습을 할 수 있게 이끕니
                                                            앞의 코드를 실행한 뒤 입력 요소에 값을 입력해 각 콜백 함수가 실행되게 하면 다음과 같이
                         옵션스 API   컴포지션 API
                                                            watchEffect() 함수만 DOM이 갱신된 후의 값을 제대로 가져오는 것을 볼 수 있습니다.
                     다. 예제로 문법을 익히고 1분 퀴즈, 셀프체크로 이어지는 단계별 학습으로 개념을 완벽하게 이
                         beforeCreate()
                                   setup 영역이 대체함
                         created()  setup 영역이 대체함           그림 7-11 watchPostEffect() 실행결과
                         beforeMount()
                     해할 수 있습니다.  onBeforeMount()
                         mounted()  onMounted()                                                              7장 컴포지션 API 다루기
                         beforeUpdate()  onBeforeUpdate()
                     ① 형식          onUpdated()             ② 팁과 노트
                         updated()
                         beforeUnmount()
                                   onBeforeUnmount()
                     문법을 이해하고 활용하기 쉽게 정리                   실습 시 생길 수 있는 의문점 해결
                         unmounted()  onUnmounted()
                        ②  컴포지션 API에서 props 속성은 defineProps() 함수로 정의하며, 형식은 다음과 같습
                                                              Note  메모리에서 제거하기
                        니다.
                                                              watch(), watchEffect(), watchPostEffect() 함수는 모두 컴포넌트가 종료되기 전에 메모리에서 자
                       형식  <script setup>                     동으로 해지됩니다. 컴포넌트의 종료 여부와 상관없이 인위적으로 메모리에서 제거하고 싶다면 각 함수에서
                          const props = defineProps({         반환한 함수를 사용하면 됩니다.
                                                                     7장 컴포지션 API 다루기
                            propA: String,
                            propB: [String, Number],
                                                               const unwatch = watch( 중략 );
                            propC: {
                                                               const unwatchEffect = watchEffect( 중략 );
                              type: Object,
                                                               const unwatchPostEffect = watchPostEffect( 중략 );
                              default: () => ({}),
                                                               unwatch();
                              required: true
                                                               unwatchEffect();
                            },
                                                               unwatchPostEffect();
                          });
                          </script>
                                                              import { useRoute } from 'vue-router';
                                                              const route = useRoute();
                        ③  옵션스 API에서는 컴포넌트에서 전달한 이벤트를 받을 때 emits 옵션 속성을 사용하지
                                                              const id = route.params.id; // 한 번에 useRoute().params.id라고 작성해도 됨
                        만, 컴포지션 API에서는 defineEmits() 함수를 사용합니다.
                                                              console.log(id);
                                                              </script>                                 319
                     ③ 1분 퀴즈                               ④ 수코딩의 조언
                                                              <template>
                       형식  <script setup>
                                                                <h1>id: {{ id }}</h1>
                          import { defineEmits } from 'vue';
                     간단한 문제로 배운 내용을 바로 확인                  현업에서의 경험이 담긴 조언으로 노하우 습득
                          const emit = defineEmits(eventNamesArray);  </template>
                          </script>
                      1분 퀴즈                                  정답 노트 p.558
                                                                    컴포지션 API 방식으로 route 인스턴스에 접근할 때 한 가지 주의할 점이 있습니다.
                                                             수코딩의 조언
                      2.  다음 설명 중 틀린 것을 고르세요.                       useRoute() 함수를 호출해 반환되는 route 인스턴스는 반드시 <script setup> 내부에
                                                                    서 사용해야 하고, 라이프사이클 훅이나 함수 안에서 사용하면 안 됩니다. 즉, 다음과 같이 작
                         ①  옵션스 API에서는 함수를 정의할 때 methods 옵션 속성을 사용한다.
                                                                 339  성하면 에러가 발생합니다.
                         ②   컴포지션 API에서 반응형 데이터는 ref() 또는 reactive() 함수로 정의한다.
                         ③   ref() 함수로 생성한 반응형 데이터를 HTML 태그의 ref 속성의 값으로 지정해 DOM 요소를 참조  <script setup>
                                                                    import { onBeforeMount } from 'vue';
                         할 수 있다.
                                                                    import { useRoute } from 'vue-router';
                         ④   계산된 속성은 반응형 데이터 1개 이상을 참조해서 미리 데이터를 계산할 때 사용하며, computed()   onBeforeMount(() => {  8장 뷰 라우터로 라우팅 기능 사용하기
                         함수로 정의한다.                                    const route = useRoute();  // 에러 발생
                                                                      ...
                         ⑤   컴포지션 API에서 사용할 수 있는 감시자 속성은 watch(), watchEffect(), watchPostEffect()   });
                         함수로 정의한다.                                  </script>
                                                            8.2.3 예외 처리
                                                            뷰 라우터를 사용했을 때 정의된 URL의 패스가 라우트 객체에 없다면 에러 없이 빈 화면을 보
                 008                                        여줍니다. 하지만 정의되지 않은 패스 값을 사용해 애플리케이션에 접근했다는 것 자체가 넓은
                                                            범위에서는 에러로 인식되는 것이 타당합니다. 그래서 보통은 이런 경우를 대비해 라우트 객체
                                                            에 정의되지 않은 모든 경로를 인식해서 별도의 에러 페이지가 보일 수 있도록 처리합니다.
                                                            그러면 라우트 객체에 정의되지 않은 패스 값을 모두 일치시킬 수 있는 라우트 객체는 어떻게
                                                            정의할 수 있을까요? 앞에서 배운 동적 경로 매칭은 특정 패턴의 URL만 인식하므로 모든 경
                                                            로를 일치하게 하지는 못합니다. 예를 들어, 다음과 같이 '/:notfound'라고 작성하면 /user,
                                                                                                        357


                    320
   2   3   4   5   6   7   8   9   10   11   12