color-mode

 

 

https://nuxt.com/modules/color-mode

 

Color-mode Module · Nuxt

 

nuxt.com

 

https://color-mode.nuxtjs.org/

 

Documentation · Nuxt Color Mode

Dark and Light mode with auto detection made easy with Nuxt 🌗 Nuxt 3 and Nuxt Bridge supportAdd .${color}-mode class to for easy CSS themingForce a page to a specific color mode (perfect for incremental development)Works with client-side and universal r

color-mode.nuxtjs.org

 

 

 

반응형

 

 

스크롤바를 내렸을 때 등장하는 애니메이션을 주고 싶은 경우 사용하면 좋은 라이브러리들입니다.

https://greensock.com/get-started/

Scroll Reveal - https://scrollrevealjs.org/

Animate On Scroll - https://michalsnik.github.io/aos/

 

AOS - Animate on scroll library

AOS Animate On Scroll Library Scroll down

michalsnik.github.io

 

 

https://qiita.com/googflog/items/d091ddab30d91022dd19

 

GSAP の ScrollTrigger を fullpage.js みたいに使うメモ - Qiita

ホイールの動きにすぐ反応してほしいよね GSAP の ScrollTriggr で fullpage.js みたいに全画面でセクションごとに一気にスクロールさせるには snapを使う方法がありますが、 ScrollTriggr ...

qiita.com

 

https://alvarotrigo.com/blog/7-scroll-text-animations-css-and-js/

 

7 scroll text animations [CSS & JS]

Does scrolling text ruin UX/UI? Not always, and here's the proof! Here are 7 great animations you can use on your site

alvarotrigo.com

 

https://codepen.io/jemmawakim/pen/RwGgYQb

 

fullpage + scrolltrigger

...

codepen.io

 

https://css-tricks.com/greensock-scrolltrigger/

 

GreenSock ScrollTrigger | CSS-Tricks

High five to the Greensock gang for the ScrollTrigger release. The point of this new plugin is triggering animation when a page scrolls to certain positions,

css-tricks.com

 

 

반응형

서버사이드 렌더링이란?

서버에서 페이지를 그려 클라이언트(브라우저)로 보낸 후 화면에 표시하는 기법

Vue SPA을 서버사이드렌더링의 반대인 클라이언트 사이드 렌더링 방식도 있다.

 

클라이언트 사이드 렌더링

서버에서 넘겨받은 HTML 코드에는 body 태그 본문에 <div id="app"></div> 밖에 없지만 화면에는 Welcome To Your Vue.js App 텍스트와 이미지가 있습니다. 이 텍스트와 이미지는 모두 클라이언트(브라우저)에서 동작한 Vue.js 라이브러리가 그려준 것. 즉 브라우저에서 화면의 결과를 그려낸 것

 

서버 사이드 렌더링과 클라이언트 사이드 렌더링 차이점

어디서 화면에 보일 페이지의 내용을 그리느냐의 차이

클라이언트 사이드 렌더링은 페이지의 내용을 브라우저에서 그리고 서버 사이드 렌더링은 서버에서 페이지의 내용을 다 그려서 브라우저로 던져줍니다.

 

 

서버 사이드 렌더링 장점

서버 사이드 렌더링을 쓰는 목적은 크게 "검색 엔진 최적화"와 "빠른 페이지 렌더링"

SNS에서 링크를 공유했을 때 해당 웹 사이트의 정보를 이미지와 설명으로 표시해주는 OG(Open Graph) Tag를 페이지 별로 적용하기 위해서는 서버 사이드 렌더링이 효율적.

 

서버 사이드 렌더링은 빈 HTML 페이지를 받아 브라우저에서 그리는 클라이언트 사이드 렌더링과 다르게 서버에서 미리 그려서 브라우저로 보내주기 때문에 페이지를 그리는 시간을 단축할 수 있습니다. 사용자 입장에서는 화면에 유의미한 정보가 표시되는 시간이 빨라지는 것

 

 

서버 사이드 렌더링의 단점

서버 사이드 렌더링은 Node.js 웹 애플리케이션 실행 방법을 알아야하고 서버쪽 환경 구성과 함께 클라이언트, 서버 빌드에 대한 이해가 필요합니다. 따라서, 프런트엔드 개발 입문자 입장에서는 쉽지 않은 진입 장벽이 존재

 

또한, Node.js 환경에서 실행되기 때문에 브라우저 관련 API를 다룰 때 주의해야 합니다. 뷰 싱글 페이지 애플리케이션의 라이프 사이클 훅과는 다른 환경(브라우저가 아닌 Node.js)에서 동작하기 때문에 beforeCreate created에서 window document와 같은 브라우저 객체에 접근할 수 없습니다.

서버 사이드 렌더링의 경우 컴포넌트가 최초로 생성되는 시점이 브라우저 위가 아니라 Node.js 환경이기 때문에 
beforeCreate 나 created 에서 브라우저 객체를 접근할 수 없습니다.
대신 beforeMount 나 mounted에서 window와 document 를 접근할 수 있습니다.

 

 

 

https://nuxtjs.org/docs/concepts/server-side-rendering/

https://vuejs.org/guide/scaling-up/ssr.html

https://joshua1988.github.io/vue-camp/nuxt/ssr.html

 

반응형

Nuxt.js

서버사이드 렌더링 프레임워크로 Vue.js로 서버사이드 렌더링을 구현할때 가장많이 쓰는 프레임워크.. 
서버사이드렌더링 기술은 실무자들의 가장 큰 고민인 빠른페이지 로딩속도와 성능 최적화에 대한 해답을 제시하고 있다.
더많은 사용자들에게 전달할 수 있도록  SEO와 사이트 정보 전달 측면에서도 강하다. 
기존의 Vue SPA에 추가적인 규칙이나 기능들을 제공하며
웹 애플리케이션을 제작할 때 필요한  Vuex,Router,Axios 같은 라이브리들을 Nuxt.js에서 미리 구성하여
SPA, 서버사이드 렌더링, 정척 웹사이트를 쉽게 제작할 수 있다. 

선수 지식으로는 Reactivity, Component, VueRouter, Vuex, axios 등이 필요하다.

 

서버사이드 렌더링이란?
- 웹페이지 내용을 서버에서 모두 작성하여 클라이언트(브라우저)로 보낸 뒤 화면에 그리는 방식

 

 

Nuxt.js의 장점

  • 검색 엔진 최적화
  • 초기 프로젝트 설정 비용 감소와 생산성 향상
    • ESLint, Prettier
    • 라우터, 스토어 등의 라이브러리 설치 및 설정 파일 필요 X
    • 파일 기반의 라우팅 방식. 설정 파일 자동 생성
  • 페이지 로딩 속도와 사용자 경험 향상
    • 브라우저가 하는 일을 서버에 나눠준다
    • 모르면 지나칠 수 있는 코드 스플리팅이 기본으로 설정

 

Nuxt.js의 특징 

Nuxt의 특징을 요약해보면 크게 아래와 같이 구분됩니다.

 

Nuxt 시작하기

Nuxt 설치 명령어

npm init nuxt-app [프로젝트명]

nuxt-app 프로젝트 설치 명령어

 

실행하기

cd [프로젝트명]
npm run dev

 

 

 

프로젝트 폴더구조

Nuxt.js 버전 2.15.7부터 프로젝트 폴더 구조가 변경됨

.nuxt - Nuxt의 빌드 결과물이 담기는 폴더 

 

 

https://nuxtjs.org/

 

The Intuitive Vue Framework

Build your next Vue.js application with confidence using Nuxt. An open source framework making web development simple and powerful.

nuxtjs.org

 

https://joshua1988.github.io/vue-camp/nuxt/intro.html

 

Introduction | Cracking Vue.js

Nuxt란? Nuxt는 Vue.js로 빠르게 웹을 제작할 수 있게 도와주는 프레임워크입니다. 웹 애플리케이션을 제작할 때 필요한 뷰엑스, 라우터, Axios와 같은 라이브러리들을 미리 구성하여 싱글 페이지 애

joshua1988.github.io

https://github.com/nuxt/eslint-plugin-nuxt

 

GitHub - nuxt/eslint-plugin-nuxt: ESLint plugin for Nuxt.js [WIP]

ESLint plugin for Nuxt.js [WIP]. Contribute to nuxt/eslint-plugin-nuxt development by creating an account on GitHub.

github.com

https://develop365.gitlab.io/nuxtjs-0.10.7-doc/ko/faq/github-pages/

 

GitHub Pages에 배포하기 - Nuxt.js

GitHub Pages 에 배포하려면? Nuxt.js를 사용하면, 예를 들어 GitHub Pages과 같은 정적호스팅 서비스에서 웹 어플리케이션을 호스팅할 수 있습니다. GitHub Pages에 배포하려면 정적 웹 어플리케이션을 생성

develop365.gitlab.io

 

반응형

Vue에서 PDF파일 보기, 다운로드, 프린트 기능 지원하기

Install vue-pdf-app

npm i vue-pdf-app

 

Pdf.vue

// Pdf.vue
<template>
    <VuePdfApp pdf="./../resume_kangjiyeon.pdf" page-scale="100" @open="openHandler"></VuePdfApp>
</template>
<script>
import VuePdfApp from "vue-pdf-app";
export default {
  components: {
    VuePdfApp,
  },
  methods: {
    openHandler(pdfApp) {
      window._pdfApp = pdfApp;
    },
  },
};
</script>
<style scoped>
@import "https://unpkg.com/vue-pdf-app@2.0.0/dist/icons/main.css";
</style>

 

https://www.npmjs.com/package/vue-pdf-app

 

vue-pdf-app

Vue 2 pdf viewer. Latest version: 2.1.0, last published: 10 months ago. Start using vue-pdf-app in your project by running `npm i vue-pdf-app`. There are 2 other projects in the npm registry using vue-pdf-app.

www.npmjs.com


 

https://codesandbox.io/s/mqyzy8158x?file=/src/App.vue 

 

Vue PDF Download - CodeSandbox

Vue PDF Download by sakapun using html2canvas, pdfmake, vue

codesandbox.io

https://codesandbox.io/s/vue-pdf-app-external-pdfj-interaction-g5jeb?file=/src/App.vue 

 

vue-pdf-app-external-pdfj-interaction - CodeSandbox

[Vue warn]: Invalid prop: type check failed for prop "field"

codesandbox.io

https://github.com/sandanat/vue-pdf-app

 

반응형


https://ui.toast.com/weekly-pick/ko_20190430

 

앱 테마 구현 - Vue.js와 스타일드 컴포넌트로 실시간 테마 구현하기

Vue.js 프로젝트를 진행하면서 구현하기 조금 까다로웠던 기능이 있다. 완벽한 Vue 문서(Docs)만으로 바로 답을 찾을 수 없었던 부분이 있었는데, 고객 요구 사항으로 사용자 프로필에 대한 테마를

ui.toast.com

 

반응형
// router/index.js
export default new VueRouter({
    routes: [
        {
          path: "/portfolio/blog",
          component: () => import("@/views/BlogPage.vue"),
          beforeEnter() {
            window.location.href = "https://kang-ji.tistory.com";
          },
        },
    ]
})
// views/BlogPage.vue

<template>
  <div class="blog-main">blog</div>
</template>

<script>
//import { SidebarMenu } from 'vue-sidebar-menu'

export default {
  created() {
    window.location.href = "https://kang-ji.tistory.com";
  },
};
</script>
// 컴포넌트
<template>
 <router-link tag="button" class="btn trn" to="/portfolio/blog">Blog</router-link>
</template>

외부링크로 이동

 

반응형

Vue-cli 프로젝트 생성

 

Vue-cli 설치가 되어있지 않을 경우 전역에 vue/cli 설치해주기

npm install -g @vue/cli

 

 

 

Default ([Vue 2]) 또는 Manually select features(선택하여 설치) 선택하기

Vue3는 안정화되지 않아 추후 의존성 에러 등의 문제를 발생키실 수 있다. 

 

Manually select features 선택시 체크항복

 

2.X 버전 선택

 

CSS 전처리기 선택

 

ESLInt + Prettier 선택

 

Lint on save

 

Lint on save

 

In dedicated config files 각각 별도세팅

 

설치 완료 후 프로젝트 실행하기

cd 프로젝트명
npm run serve

 

 

반응형

https://vuejsexamples.com/tag/carousel/

 

Carousel - Vue.js Examples

vue-agile Carousel component for Vue.js inspired by Slick. More powerfull with each version, touch-friendly, written in Vue and Vanilla JS (without jQuery dependency). Live Demo https://lukaszflorczak.github.io/vue-agile/ Installation yarn 20 September 201

vuejsexamples.com

https://codepen.io/alvarotrigo/pen/zpQmwq

 

vue-fullpage Issue #103

...

codepen.io

https://splidejs.com/#02

 

Splide - The lightweight, flexible and accessible slider/carousel

Splide is a lightweight, flexible and accessible slider/carousel, written in TypeScript. No dependencies, no Lighthouse errors

splidejs.com

https://antonreshetov.github.io/vue-glide/

 

Vue Glide

 

antonreshetov.github.io

 

반응형

actions 속성을 이용한 로그인 기능 구현과 비동기 처리시 유의할 점

 

SubmitForm 을 실행했을때 데이터를 요청하고 store를 이용하여 컨트롤 되고있는 상태인데 

로그인 이후의 처리로 인해 컴포넌트 단의 코드가 많아짐. 

컴포넌트단(비지니스로직이 많이 노출되지않도록) 코드를 최대한 깔끔하게 하기위한 리팩토링 

 

다른파일에 코드를 옮기는방법

1. store/index.js 에 actions를 이용해서 로그인폼 컴퍼넌트에 있는 로직들을 가져올건데 

우선 actions를 넣어주고 LOGIN함수를 만들고 

api/index.js 의 loginUser를 import 해주고 actions에 loginUser를 호출한다. 

LoginForm에서 로그인처리 로직들을 복사하여 store/index.js actions LOGIN안에 넣는다.

 

// store/index.js
import { loginUser } from '@/api/index.js';

export default new Vuex.Store({
  state: {
  ...
  },
  getters: {
   ...
  },
  mutations: {
   ...
  },
  actions: {
    LOGIN({ commit }) {
		loginUser();
    },
  },
});

 

 

 

반응형

로그인한 상태를 구현 후 발생한 문제점

로그인 후 메인화면으로 진입한 상태

 

새로고침시 에러발생 - 로딩 스피너와 상단 로그인,회원가입 이뜨며 초기상태로 되는 문제

에러구문을 살펴보면 

로그인 후 메인페이지 진입을 해서 posts 요청을 날리게 되는데 
개발자 도구의 Network > posts 를 보면 Authorization 의 속성이 비어있다. 

이러한 오류가 발생했던 이유는 

 

구현시 javascript레벨에 저장을 하고 있었고

새로고침을 하게 되면서 vue의 Store에 저장해뒀던 빈문자열 (초기화) 값이 찍히면서 

로그인시 저장되었던 token과 username 값이 사라지게 되면서 초기상태로 돌아가버렸던 것. 

 

Cookie(쿠키)를 사용하여 문제해결

로그인 인증 값 브라우저 저장소에 저장 후 확인

컴포넌트 파일에서 로그인하고나서 토큰과 username을 저장하고 router도 연결해준 상태.

 

javascript레벨에 저장하는 것 뿐만 아니라 브라우저 저장소를 이용해서 토큰 값을 저장해놓으면

새로고침을 하더라도 브라우저 저장소에서 해당값을 꺼내와 사용할 수 있게된다.

쿠키(cookie)에 정의된 함수들을 사용해보자 .

 

cookie를 setup 하는 방법
- document.cookie 를 통해 문자열을 넣어준다.
- til_auth, til_user를 이용해서 쿠키 값을 저장해오고 꺼내오도록 세팅하기

 

utils/cookies.js 

 

LoginForm.vue 에서 아래와 같이 cookies.js에 정의됬던

saveAuthToCookie(), saveUserToCooke() 함수를 import 하고 method내 비지니스 로직 안에 해당 함수를 호출한다.

이제 cookie에 token 과 username을 저장한 상태가 되는데  

이때 cookie가 저장된 것을 확인하는 방법은

서버를 실행한 후 브라우저 개발자도구 >  Application 패널 > Storage > Cookies > http://localhost:8080

에 원하는 값이 저장되는걸 확인할 수 있다. 

쿠키 API를 이용해서 브라우저 저장소에 token 과 username을 저장했다.

하지만 새로고침 했을때 여전히 문제가 발생하는데

이유는 앞써 확인한 브라우저 저장소인 cookie에 저장된 값이 Vue의 Store에 연결되지 않았기 때문..

 

 

cookie(쿠키)에 저장된 값을 Vue의 Store에 가져오기 위한 작업. 

- store/index.js 파일에서 보면 state에 username과 token이 빈문자열로 초기화되는 상태

- cookie.js에 정의된 함수중 getAuthFromCookie(), getUserFromCookie() 함수를 활용한다. 

&amp;amp;amp;amp;amp;nbsp;

store/index.js 

- cookies.js에 정의되 있는 함수 getAuthFromCookie(), getUserFromCookie() 를 import 

- state에 빈문자열이였던 token과 username값에 or 연산자를 사용하여 쿠키 함수를 추가

- 매번 Store를 생성할때마다 쿠키값을 꺼내와서 넣어보고 없으면 빈값의 문자열(초기화)

 

완료 후 실행결과

 


utils/cookies.js 본문

// utils/cookies.js

function saveAuthToCookie(value) {
  document.cookie = `til_auth=${value}`;
}

function saveUserToCookie(value) {
  document.cookie = `til_user=${value}`;
}

function getAuthFromCookie() {
  return document.cookie.replace(
    /(?:(?:^|.*;\s*)til_auth\s*=\s*([^;]*).*$)|^.*$/,
    '$1',
  );
}

function getUserFromCookie() {
  return document.cookie.replace(
    /(?:(?:^|.*;\s*)til_user\s*=\s*([^;]*).*$)|^.*$/,
    '$1',
  );
}

function deleteCookie(value) {
  document.cookie = `${value}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
}

export {
  saveAuthToCookie,
  saveUserToCookie,
  getAuthFromCookie,
  getUserFromCookie,
  deleteCookie,
};
반응형

 

로그인 후 아래의 전환된 화면에서 새로고침을 하게되면 

콘솔에러가 발생.

로딩스피너가 계속 돌면서  에러에 대한 처리가 안되어있는 상태 

로그인후 메인페이지 진입을 해서 posts 요청을 날리게 되는데 

Network > posts 를보면 Authorization 의 속성이 비어있다. 

로그인한 상태를 javascript레벨에 저장을 하고있었고

아래와 같이 vue Store에 state값을 저장해 둿었다.

 

하지만 당연히 새로고침을 하게되면서 refresh상태가 되기때문에 token과 username이 사라지게 되면서

해당 페이지로 다시 진입할때 로그인이 다시 필요해지며 API요청도 먹통이 된다. 

이런부분들을 쿠키로 처리해보자.

 

 

 

 

2. 로그인 인증 값 브라우저 저장소에 저장 후 확인

 

컴포넌트 파일에서

로그인하고나서 토큰과 username을 저장하고 router도 연결해준 상태.

javascript레벨에 저장하는 것 뿐만 아니라 브라우저 저장소를 이용해서 토큰값을 저장해놓으면

새로고침을 하더라도 브라우저 저장소에서 해당값을 꺼내와 사용할수 있게된다.

쿠키에 정의된 함수들을 사용해보자 .

cookies.js 정의된 함수 

cookie를 setup하는 방법

document.cookie 를 통해 문자열을 넣어주면 된다.

til_auth, til_user를 이용해서 쿠키 값을 저장해오고 꺼내오는 작업을 

 

// utils/cookies.js

function saveAuthToCookie(value) {
  document.cookie = `til_auth=${value}`;
}

function saveUserToCookie(value) {
  document.cookie = `til_user=${value}`;
}

export {
  saveAuthToCookie,
  saveUserToCookie,
};

 

로그인폼으로 돌아와 아래와 같이

cookie 함수 2개를 컴포넌트파일에 import하고 비지니스 로직안에 해당 함수를 호출한다. 

그렇게하면 cookie에 token 과 username을 저장한 상태가 된다. 

// LoginForm.vue

import { saveAuthToCookie, saveUserToCookie } from '@/utils/cookies';
export default {

 methods: {
    async submitForm() {
      try {
        // 비즈니스 로직
        const userData = {
          username: this.username,
          password: this.password,
        };
        ...
        saveAuthToCookie(data.token);
        saveUserToCookie(data.user.username);
      
      } catch (error) {
       ...
      } finally {
        ...
      }
    },
    ...
  },
}

 

cookie가 저장된것을 확인하는 방법

서버를 질행한 후 개발자도구 > Application 패널 > Storage > Cookies > http://localhost:8080

에 원하는 값이 저장되는걸 확인한다. 

쿠키 API를 이용해서 브라우저 저장소에 토큰값과 유저네임을 저장했다.

 

새로고침 했을때 여전히 문제가 발생하는데 이유는

앞써 확인한 쿠키에 저장된 값이 Vue의 Store에 연결이 되어있지 않았기 때문이다.

 

 

store/index.js 파일을 확인해보면

state에 username과 token이 빈문자열로 초기화 되는 상황.

해결방법은 cookies.js 에 있는 쿠키 함수 중 

getAuthFromCookie(), getUserFromCookie() 함수를 가져와서

저장된 값을 store/index.js에 활용한다. 

&nbsp;

store/index.js 

cookies.js파일에 있는  getAuthFromCookie(), getUserFromCookie() 를  연결해준다. 

state에 빈문자열이였던 token과 username값에 or연산자를 사용하여 

매번 Store를 생성할때마다 쿠키값을 꺼내와서 넣어보고 없으면 빈값의 문자열(초기화)

 

 

 

 

이를 해결하기위해 쿠키를 설정해줍니다.

// utils/cookies.js

function saveAuthToCookie(value) {
  document.cookie = `til_auth=${value}`;
}

function saveUserToCookie(value) {
  document.cookie = `til_user=${value}`;
}

function getAuthFromCookie() {
  return document.cookie.replace(
    /(?:(?:^|.*;\s*)til_auth\s*=\s*([^;]*).*$)|^.*$/,
    '$1',
  );
}

function getUserFromCookie() {
  return document.cookie.replace(
    /(?:(?:^|.*;\s*)til_user\s*=\s*([^;]*).*$)|^.*$/,
    '$1',
  );
}

function deleteCookie(value) {
  document.cookie = `${value}=; expires=Thu, 01 Jan 1970 00:00:01 GMT;`;
}

export {
  saveAuthToCookie,
  saveUserToCookie,
  getAuthFromCookie,
  getUserFromCookie,
  deleteCookie,
};

cookies.js에 정의해둔 함수를 이용해 연결해준다.

 

 

 

 

 

 

 

 

로그인 을 성공하여 전환된 화면에서 새로고침을 했을때 

 

 

 

개발자도구 > Application > Cookies 에서 오류발생 

 

로그인 인증 값 브라우저 저장소에 저장

 

// LoginForm.vue
import { saveAuthToCookie, saveUserToCookie } from '@/utils/cookies';

export default {
  data() {
    return {
      // form values
      username: '',
      password: '',
      // log
      logMessage: '',
    };
  },
  computed: {
    isUsernameValid() {
      return validateEmail(this.username);
    },
  },
  methods: {
    async submitForm() {
      try {
        // 비즈니스 로직
        const userData = {
          username: this.username,
          password: this.password,
        };
        const { data } = await loginUser(userData);
        console.log(data.token);
        this.$store.commit('setToken', data.token);
        this.$store.commit('setUsername', data.user.username);
        saveAuthToCookie(data.token);
        saveUserToCookie(data.user.username);
       
      } catch (error) {
        // 에러 핸들링할 코드
        console.log(error.response.data);
        this.logMessage = error.response.data;
      } finally {
        this.initForm();
      }
    },
    initForm() {
      this.username = '';
      this.password = '';
    },
  },
};

 

개발자도구 > Application > Storage > Cookies

 

 

 

개발자도구 > Vue > Switch to Vuex(반시계아이콘) > Base State 클릭

아래의 State token값이 빈값.

쿠키에 저장된 값이

Vue Store에 연결이 되어있지 않다. 

 

 

 

util/cookies.js 함수

saveAuthToCookie, saveUserToCookie 를 통해 저장을 했다. 

쿠키에서 값을 가져올때 

getAuthFromCookie(), getUserFromCookie() 함수를 이용해서

저장된 값을 Store의 index.js에서 활용해주는작업

 

 

매번 Store를 생성할때마다 쿠키값을 꺼내와서 넣어보고 없으면 빈값의 문자열(초기화)

// store/index.js

import Vue from 'vue';
import Vuex from 'vuex';
import { getAuthFromCookie, getUserFromCookie } from '@/utils/cookies';

export default new Vuex.Store({
  state: {
    username: getUserFromCookie() || '',
    token: getAuthFromCookie() || '',
  },
 
});

 

실행결과

 

store/index.js 에도 cookie 함수 연결해주기

반응형

서버로 요청을 보내는것과 서버에서 받은 응답을 화면(컴포넌트)단에서 처리하기전에

추가로직을 넣을수 있는 API

 

인터셉터를통해 token을 실어보낼 수 있다.

 

// Add a request interceptor
axios.interceptors.request.use(function (config) {
    // 요청보내기 전 코드
    return config;
  }, function (error) {
    // 요청에러 처리
    return Promise.reject(error);
  });

// Add a response interceptor
axios.interceptors.response.use(function (response) {
    // 응답을 받기 전에 처리
    // Any status code that lie within the range of 2xx cause this function to trigger
    // Do something with response data
    return response;
  }, function (error) {
    // 응답에러 전처리
    // Any status codes that falls outside the range of 2xx cause this function to trigger
    // Do something with response error
    return Promise.reject(error);
  });

 

반응형

Vuex

Vuex는 vue.js 애플리케이션을 위한 상태관리 라이브러리 
모든 컴포넌트들에 접근가능한 데이터 저장소로
컴포넌트간 공통으로 사용되는 데이터 속성을 저장한다.
Vuex는 Vue.js의 상태관리 라이브러리로 애플리케이션의 모든 컴포넌트에 대한 중앙 집중식 저장소 역할을 하며 의도적인 방법으로 상태를 변경 및 관리할 수 있다.
Vuex는 기존 React의 Flux의 아키텍처를 따라가고 있고 React로 본다면 Redux와 비교 대상으로 볼 수 있다.
Vue.js에서도 Redux를 사용할 수 있지만 Vue.js는 Vuex와의 호환이 좋을 뿐만 아니라 더 직관적으로 개발할 수 있다.

 

설치 (dependencies에 설치)

npm i vuex

 

store/index.js

//store/index.js

import Vue from 'vue';
import Vuex from 'vuex';

Vue.use(Vuex);

export default new Vuex.Store({
  state: {
    username: '',
  },
});

 

main.js

// main.js

import Vue from 'vue';
import App from './App.vue';
import router from '@/routes/index';
import store from '@/store/index';

Vue.config.productionTip = false;

new Vue({
  render: h => h(App),
  router,
  store,
}).$mount('#app');

 

npm run serve

 

크롬 Vue개발자도구

 


Vuex 구조

Vuex는 state, mutations, action, getters 4가지 형태로 관리가 되며,

이때 이 관리 포인트는 store 패턴을 사용하고 통상 store라고 불린다.

이 4가지는 서로간의 간접적으로 영향이 있으며 단방향 데이터 흐름으로 볼 수 있다.

 

1. State

  • 컴포넌트 간에 공유하는 데이터 = data() { ... }
  • Vue 컴포넌트에서 data로 볼 수 있다. 원본 소스의 역할을 하며, View와 직접적으로 연결되어있는 Model이다. 이 state는 직접적인 변경은 불가능하고 mutation을 통해서만 변경이 가능하다. mutation을 통해 state가 변경이 일어나면 반응적으로 View가 업데이트된다.

2. Mutations

  • 동기로직 
  • state를 변경하는 유일한 방법이고 이벤트와 유사하다. mutation은 함수로 구현되며 첫 번째 인자는 state를 받을 수 있으며, 두 번째 인자는 payload를 받을 수 있다. 여기서 payload는 여러 필드를 포함할 수 있는 객체형태도 가능하다. 이 mutation은 일반적으로(Helper를 쓰지 않는 경우)는 직접 호출을 할 수 없으며, commit을 통해서만 호출할 수 있다.

3. Actions

  • 비동기 로직 = axios
  • Action은 mutation과 비슷하지만 mutation과는 달리 비동기 작업이 가능하다. 또한 mutation에 대한 commit이 가능하여 action에서도 mutation을 통해 state를 변경할 수 있다. 
  • action에서는 첫 번째 인자를 context 인자로 받을 수 있으며 이 context에는 state, commit, dispatch, rootstate와 같은 속성들을 포함한다. 두 번째 인자는 mutation과 동일하게 payload로 받을 수 있다.
  • commit을 통해 mutation을 호출했다면 Action은 dispatch를 통해서 호출한다. context의 속성을 보면 dispatch가 있는 것으로 보아 action에서는 서로 다른 action을 호출할 수 있다는 것을 볼 수 있다.

4. Getters

  • 중복된 데이터 처리
  • Getters는 쉽게 Vue 컴포넌트에서 Computed로 볼 수 있다. 
  • 말로 풀자면 계산된 속성인데 getter의 결과는 종속성에 따라 캐시 되고 일부 종속성이 변경된 경우에만 다시 재계산된다. 
  • 즉, 특정 state에 대해 어떠한 연산을 하고 그 결과를 View에 바인딩할 수 있으며, state의 변경 여부에 따라 getter는 재계산이 되고 View 역시 업데이트를 일으킨다. 이때 state는 원본 데이터로서 변경이 일어나지 않는다.

 

반응형

dependencies 

애플리케이션 로직과 관련된 라이브러리 목록

npm run build 를 수행하게되면 dependencies 에 있는 라이브러리 목록이

포함되어  최종적인 자원이 압축(변환)이 됨.

  • axios
  • vue
  • vue-router
  • vuex

 

vuex 애플리케이션이 동작할때 필요한 라이브러리

 


devDependencies 

npm run build 의 결과물에 포함되지 않음. 

  • cli-server
  • eslint

 

반응형

+ Recent posts