[Vue.js 3] Router / Event Bubbling / 객체 비교

2023. 7. 30. 14:45· FE/Vue.js
목차
  1. Router
  2. Event Bubbling
  3. 객체 비교
반응형

프로젝트로 배우는 Vue.js 3

 

이 포스팅에서 작성하는 내용은 프로젝트로 배우는 Vue.js 3 에서 발췌하였습니다.

 

https://inf.run/sxQT

 

프로젝트로 배우는 Vue.js 3 - 인프런 | 강의

Vue.js 3 사용 방법을 배우고 프로젝트에 적용을 하면서 익힐 수 있도록 도와드립니다., - 강의 소개 | 인프런

www.inflearn.com


Router

Vue.js 에서 컴포넌트간 이동을 위해서는 Router 기능을 사용해야 한다.

npm install vue-router@4
import { createRouter, createWebHistory } from 'vue-router';
import Page1 from '../pages/page1/index.vue';
import Page2 from '../pages/page2/index.vue';
import Page2 from '../pages/PageDetail/index.vue';

const router = createRouter({
    history: createWebHistory(),
    routes: [
        {
            path: '/Page1',
            name: 'Page1',
            component: Page1
        },
        {
            path: '/Page2',
            name: 'Page2',
            component: Page2
        },
        {
            path: '/Page/:pageId',
            name: 'PageDetail',
            component: PageDetail
        }
    ]
});

export default router;

Router 설정은 사용은 위와 같이 routes 안에 path(링크 주소), name(이름), component(컴포넌트)를 넣어주면 된다.

 

 

Router를 이용해서 이동하는 방법

 

1. router-link 를 이용하는 방법

<template>
  <nav class="navbar navbar-expand-lg navbar-light bg-light">
    <router-link class="navbar-brand" :to="{ name: 'Page1'}">
      Page1
    </router-link>

    <ul class="navbar-nav mr-auto">
      <li class="nav-item active">
        <router-link class="nav-link" :to="{ name: 'Page2'}">
          Page2
        </router-link>
      </li>
    </ul>
  </nav>
  <div class="container">
      <router-view/>
  </div>
</template>

<script>
export default {
}
</script>

<style>
</style>

 

 

2. router-link 를 이용하는 방법

<template>
...
</template>
<script>
import { useRouter } from 'vue-router';

export default {
  setup() {
    const router = useRouter();

    const moveToPage = (id) => {
      // router.push(`/Page/${id}`);
      router.push({
        name: 'PageDetail',
        params: {
          pageId: id
        }
      });
    }  		
    ...
  }
}
</script>

<style>

</style>
  • router.push 를 이용해서 컴포넌트간 페이지 이동을 구현할 수 있다.
  • 위 주석 처리한 부분으로도 사용 가능하다.
  • name을 사용했을 때의 장점은 추후에 유지보수성에서 용이하다.
    (주소가 변경되었을 때, 주소를 변경하지 않아도 됨. 이름은 그대로이기 때문)
  • 주소에 파라미터를 넘겨줘야할 때
    • 주소로 표현하는 경우, 라우터 설정에서 정의한 형식대로 파라미터를 넣는다.
    • name으로 표현하는 경우, params 에 파라미터를 넣어준다. 
      (파라미터 이름은 라우터 설정에서 정의한 파라미터 이름과 동일해야 한다.)

 

 

 

Event Bubbling

<template>
...
  <button 
    @click.stop="clickEvent(index, $event)"
  >
  Delete
  </button>
</template>
<script>
...
}
</script>

<style>

</style>
  • EventBubbling: 이벤트가 발생했을 때, 상위 컴포넌트로 전달되는 현상.
  • 이를 막기위해서는 아래와 같이 이벤트 뒤에 stop을 넣어주면 된다.
  • $event : 이벤트 변수 (해당 컴포넌트의 value 등을 가져올 수 있음)

 

 

 

객체 비교

원시 타입

  • 문자, 정수와 같은 기본적인 타입
  • 비교와 복사 모두 값을 기준으로 함

 

참조 타입

  • 객체, 배열과 같은 타입
  • 비교와 복사 모두 '주소' 를 기준으로 함

 

참조 타입 복사 방법

a = {
  name: 1
};

b = a;		// a의 주소를 b에 복사
c = {...a}; // a의 값을 b에 복사

 

참조 타입 비교 방법

a = {
  name: 1
};

c = {...a}; // a의 값을 b에 복사

// 1. JSON.stringify 비교 방법
console.log(JSON.stringify(a) == JSON.stringify(b));

// 2. lodash 라이브러리 이용
import _ from 'lodash';
console.log(_.isEqual(a, b);
  • 1번 방식의 JSON 객체를 String으로 변환해서 사용하는 방법은 추천되지 않는다.
    (객체 내부의 순서가 변경되는 경우, 제대로 비교 불가)
  • 2번 방식의 lodash 라이브러리를 이용하면 참조 타입간에 편하게 비교가 가능하다.

https://www.npmjs.com/package/lodash

 

lodash

Lodash modular utilities.. Latest version: 4.17.21, last published: 2 years ago. Start using lodash in your project by running `npm i lodash`. There are 174303 other projects in the npm registry using lodash.

www.npmjs.com

 

 

반응형

'FE > Vue.js' 카테고리의 다른 글

[Vue.js 3] Teleport, Slot, v-model binding, toRefs  (0) 2023.10.01
[Vue.js 3] Lifecycle Hooks, 함수 재사용  (0) 2023.09.10
[Vue.js 3] Computed, async / await, watchEffect, watch  (0) 2023.07.16
[Vue.js 3] v-bind / v-model, v-for, v-show / v-if, emit / props  (0) 2023.07.09
[Vue.js 3] Vue.js 3 설치, Composition API, Fragment, ref/reactive  (0) 2023.07.01
  1. Router
  2. Event Bubbling
  3. 객체 비교
'FE/Vue.js' 카테고리의 다른 글
  • [Vue.js 3] Teleport, Slot, v-model binding, toRefs
  • [Vue.js 3] Lifecycle Hooks, 함수 재사용
  • [Vue.js 3] Computed, async / await, watchEffect, watch
  • [Vue.js 3] v-bind / v-model, v-for, v-show / v-if, emit / props
멍목
멍목
개발 관련 새롭게 알게 된 지식이나 좋은 정보들을 메모하는 공간입니다.
반응형
멍목
김멍목의 개발블로그
멍목
전체
오늘
어제
  • 분류 전체보기 (512) N
    • BE (190)
      • Spring (21)
      • Java (141)
      • Kotlin (6)
      • JPA (22)
    • FE (33)
      • Javascript (16)
      • Typescript (0)
      • React (5)
      • Vue.js (9)
      • JSP & JSTL (3)
    • DB (32)
      • Oracle (22)
      • MongoDB (10)
    • Algorithm (193) N
    • Linux (8)
    • Git (6)
    • etc (42)
    • ---------------------------.. (0)
    • 회계 (4)
      • 전산회계 2급 (4)
    • 잡동사니 (2)

블로그 메뉴

  • 홈
  • 관리

공지사항

인기 글

태그

  • 자기개발
  • java 8
  • Effective Java
  • 자기 공부
  • 코테 공부
  • Oracle
  • MongoDB with Node.js
  • Java to Kotlin
  • 코테공부
  • MongoDB 기초부터 실무까지
  • MongoDB 공부
  • 이펙티브 자바
  • 알고리즘공부
  • junit5
  • vue3 공부
  • JPA 공부
  • 자기 개발
  • 코틀린
  • 프로젝트로 배우는 Vue.js 3
  • 자바 개발자를 위한 코틀린 입문
  • 자기공부
  • 더 자바 애플리케이션을 테스트하는 다양한 방법
  • 더 자바 Java 8
  • 이펙티브자바
  • 자바공부
  • 자바 테스팅 프레임워크
  • 전산회계 2급 준비
  • JPA
  • 자바 공부
  • 알고리즘 공부

최근 댓글

최근 글

hELLO · Designed By 정상우.v4.2.0
멍목
[Vue.js 3] Router / Event Bubbling / 객체 비교
상단으로

티스토리툴바

개인정보

  • 티스토리 홈
  • 포럼
  • 로그인

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.