window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster가 이미 존재합니다') } else { w.LeadBooster = { q: [], on: 함수 (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: 함수 (n) { this.q.push({ t: 't', n: n }) }, } } })() Vue.js 앱 개선. 몇 가지 실용적인 팁 - The Codest
The Codest
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 산업 분야
    • 핀테크 및 뱅킹
    • E-commerce
    • 애드테크
    • 헬스 테크
    • 제조
    • 물류
    • 자동차
    • IOT
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
  • 회사 소개
  • 서비스
    • 소프트웨어 개발
      • 프론트엔드 개발
      • 백엔드 개발
    • Staff Augmentation
      • 프론트엔드 개발자
      • 백엔드 개발자
      • 데이터 엔지니어
      • 클라우드 엔지니어
      • QA 엔지니어
      • 기타
    • IT 자문
      • 감사 및 컨설팅
  • 가치
    • CEO
    • CTO
    • 배달 관리자
  • 우리 팀
  • Case Studies
  • 방법 알아보기
    • 블로그
    • 모임
    • 웹 세미나
    • 리소스
채용 정보 연락하기
뒤로 화살표 뒤로 가기
2020-10-30
소프트웨어 개발

Vue.js 앱 개선. 몇 가지 실용적인 팁

The Codest

도미니크 그르제지엘스키

시니어 Software Engineer

Vue는 사용자 인터페이스 구축을 위해 빠르게 성장하고 있는 진보적인 프레임워크입니다. JavaScript는 GitHub에서 가장 많은 별을 받은 프레임워크이자 2016년과 2017년에 같은 포털에서 가장 높은 별을 받은 프로젝트가 되었습니다.

다음에서 애플리케이션 만들기 Vue 는 정말 간단하지만, 좋은 품질의 애플리케이션을 만들고 싶다면 조금 더 도전해야 합니다.

의 일원이 되면 The Codest 팀 의 진정한 옹호자이자 Vue 기술를 공유하고 싶습니다. 팁 (공식 Vue 문서에서 복사되지 않음) 쉽게 개선할 수 있습니다. 코드 품질과 Vue 애플리케이션의 성능.

먼저 Vue 스타일 가이드와 ESLint를 적용합니다.

이미 말한 내용을 반복하고 싶지 않습니다. Vue 문서에 스타일 가이드가 있습니다:
Vue 2 문서 - 스타일 가이드 또는
Vue 3 문서 - 스타일 가이드

네 가지 규칙 카테고리를 찾을 수 있습니다. 저희는 이 중 세 가지를 중요하게 생각합니다:

  • 필수 오류를 방지하는 규칙이 있습니다,
  • 추천 그리고 강력 추천 모범 사례를 지키기 위한 규칙 - 다음을 수행합니다. 품질 향상 코드의 가독성.

"뭐?!"라고 생각할 수도 있습니다. 모든 규칙을 기억해야 하나요?" 물론 그렇지 않습니다. ESLint를 사용하면 이러한 규칙을 대신 관리할 수 있습니다. ESLint 구성 파일에서 모든 것을 올바르게 설정하기만 하면 됩니다. 저는 추천 사전 설정 모범 사례로 앱을 구축하는 데 도움이 되는 완전히 무료인 규칙 세트를 얻을 수 있습니다. 어떻게 설정하나요?

기본적으로 다음을 찾을 수 있습니다. 확장 키를 ESLint 구성에 넣고 "플러그인:뷰/에센셜" 와 함께 "plugin:vue/recommended"를 클릭하세요.

물론 ESLint가 모든 것을 자체적으로 처리할 수는 없으므로 기억해야 할 몇 가지 규칙이 있습니다. 예를 들어

  • 일관된 이름 지정,
  • 케밥 케이스의 이벤트 이름 지정,
  • 접두사 $_namespace_ 플러그인, 믹스인 등의 비공개 속성,
  • 단일 파일 컴포넌트 최상위 요소 순서를 지정합니다.

여러 개의 V-IF를 사용하지 마십시오.

조건부로 1개 이상의 요소를 렌더링해야 할 때도 있지만, 사람들은 종종 그런 식으로 작성합니다:

콘텐츠

콘텐츠

콘텐츠

더 우아하게 작성할 수 있기 때문에 불필요합니다:

<code> <template v-if="condition">
   <div>콘텐츠</div>
   <div>콘텐츠</div>
   <div>콘텐츠</div>
 </template>

하지만 이를 루트 요소로 사용하려면 어떻게 해야 할까요? In Vue를 사용할 수 없습니다. 를 사용할 수 있습니다. 경우에 따라서는 div로 감싸는 것으로 충분할 수도 있습니다.

하지만 아무리 원해도 HTML 시맨틱 때문에(예를 들어

  • 의 직계 자식이어야 합니다.
      또는
        ). 그래서 글을 써야 할 때

      1. (( item.name ))
      2. ...그리고 이런 오류가 표시됩니다 :

        Vue js 코드

        다음과 같이 처리할 수 있습니다. JSX와 함수형 컴포넌트 사용를 전달하면 부울을 전달해야 하며 이 부울이 v-if를 대체합니다.

        컴포넌트에 API 호출 핸들러를 작성하지 마세요.

        사실 이것은 컴포넌트에서 하지 말아야 할 일의 예시 중 하나일 뿐입니다. 컴포넌트 로직에서 로컬로 필요한 작업만 수행하면 됩니다. 외부에 있을 수 있는 모든 메서드는 비즈니스 로직과 같이 컴포넌트 내에서만 분리하여 호출해야 합니다.

        예시:

        이와 같은 방법 대신

        created() (
        this.fetchArticles();
        ),
        메소드: (
         async fetchArticles() (
          try (
            const data = await axios.get(url);
            this.articles = data.articles;
            ) catch (e) (
            // 오류 처리
            )
          )
        )

        API 결과를 반환하는 적절한 메서드를 호출하기만 하면 됩니다:

         async fetchArticles() (
           try (
             this.articles = await ArticlesService.fetchAll();
           ) catch (e) (
             // 오류 처리
           )
          )

        많은 양의 소품 대신 슬롯 사용

        때로는 소품을 사용하는 것만으로도 충분하지만 효율적이지 않은 경우도 있습니다. 컴포넌트가 원하는 대로 작동하도록 하기 위해 너무 많은 소품을 추가해야 하는 상황에서 발생할 수 있습니다. 가장 간단한 예로 버튼 컴포넌트를 들 수 있습니다. 의심할 여지 없이 애플리케이션의 어느 곳에서나 사용할 수 있는 컴포넌트입니다. 이와 같은 버튼 컴포넌트를 생각해 봅시다.

        
        (( 텍스트 ))

        이 단계에서는 텍스트 소품만 허용하는 간단한 컴포넌트입니다. 하지만 버튼에 아이콘이 필요하기 때문에 이것만으로는 충분하지 않을 수 있습니다. 이 경우 텍스트 앞이나 뒤에 추가할 수 있는 옵션을 원하기 때문에 2개의 소품을 더 추가해야 합니다(2개). 따라서 컴포넌트는 다음과 같이 보일 것입니다:

        
        (( 텍스트 ))

        소품이 3개밖에 없으니 나쁘진 않지만...

        로딩 표시기가 필요하다면 어떻게 해야 하나요? 다른 소품을 추가해야 합니다. 새로운 기능이 추가될 때마다 그렇습니다! 컴포넌트의 수가 늘어나는 것을 따라잡는 것이 어렵지 않나요? 네, 물론 그렇습니다!

        대신 슬롯을 사용하세요..

        더 간단하죠? 그렇다면 아이콘 추가 기능은 어떻게 사용할 수 있을까요? 정말 간단합니다! 다음과 같이 컴포넌트를 사용하기만 하면 됩니다:

        뒤로
        
        다음

        손쉬운 성능 향상 방법

        정말 쉽게 구현할 수 있는 몇 가지 팁을 공유하여 즉시 혜택을 누릴 수 있도록 하겠습니다.

        지연 로드 경로

        관리자나 특정 액세스 권한이 있는 사용자만 사용할 수 있는 경로가 있을 수 있으며, 다른 사용자보다 방문 횟수가 적을 수도 있습니다. 이러한 경우 지연 로드 경로를 사용하기에 적합합니다.

        컴포넌트 프로퍼티의 화살표 함수를 사용하여 가져오기 함수를 반환하면 됩니다:

         내보내기 기본값 새 VueRouter (
           (
             모드: 'history',
             routes: [
               (
                 경로: '/랜딩',
                 component: () => import('../pages/p-welcome'),
                 name: 'welcome'
               ),
          ...

        대신:

        '@/pages/p-welcome'에서 PWelcome를 가져옵니다;
        
        기본 새 VueRouter 내보내기 (
        (
        모드: 'history',
        routes: [
        (
        경로: '/랜딩',
        컴포넌트: PWelcome, //방금 가져온 컴포넌트
        name: 'welcome'
        ),

        Vue 컴포넌트 지연 로딩

        다음과 유사한 상황이 발생할 수 있습니다. Vue 구성 요소. 이렇게 단일 파일 컴포넌트를 느리게 가져올 수 있습니다:

        const lazyComponent = () => import('pathToComponent.vue')
        기본값 내보내기 (
        컴포넌트 (lazyComponent )
        )
        
        // 다른 구문
        export default (
        컴포넌트 (
        lazyComponent: () => import('pathToComponent.vue')
        )
        )

        해당 컴포넌트의 지연 로드 덕분에 요청이 있을 때만 다운로드됩니다. 예를 들어 v-if가 있는 컴포넌트가 있는 경우 해당 컴포넌트가 렌더링될 때만 요청됩니다. 따라서 v-if 값이 true가 아니면 컴포넌트는 로드되지 않습니다. 따라서 지연 임포트를 다음에도 사용할 수 있습니다. JavaScript 파일.

        보너스: Vue CLI 3+를 사용하면 느리게 로드된 모든 리소스가 기본적으로 프리페치됩니다!

        VUE JS 개발

        속성 소품 대신 투명한 래퍼 사용

        다음과 같은 컴포넌트를 생각해 보세요:

        문제없이 이렇게 사용할 수 있습니다:

        또는


        다음과 같은 이유로 작동합니다. Vue 를 사용하면 프로퍼티로 선언하지 않은 경우에도 컴포넌트에 html 속성을 전달할 수 있습니다. html 속성은 컴포넌트의 루트 요소(이 경우 입력)에 적용됩니다.

        입력 컴포넌트를 확장하려고 할 때 다음과 같은 문제가 발생합니다:

        <code> <template>
           <div class="form-group">
             <label :for="id">(( 레이블 ))</label>
             <input
               :id="id"
               :value="value"
               class="base-input"
               @input="$emit('input', $event.target.value)"
             >
           </div>
         </template>

        이제 컴포넌트를 이런 식으로 사용하세요:

         

        유형과 자리 표시자가 div(루트 요소)에 적용되기 때문에 우리가 원하는 대로 작동하지 않습니다. 따라서 입력 요소에 속성을 추가하고 싶기 때문에 이 문제를 해결해야 합니다. "필요한 소품을 추가하자!"라는 생각이 먼저 떠오를 수 있고 물론 그렇게 하면 되겠지만... 만약 우리가 유형, 자동 완성, 플레이스홀더, 자동 초점, disabled, 입력 모드등을 사용하려면 모든 HTML 속성에 대한 프로퍼티를 정의해야 합니다. 저는 개인적으로 이 긴 방법을 좋아하지 않으므로 더 나은 방법을 찾아봅시다!

        전체 문제는 다음에서 처리할 수 있습니다. 단 두 줄입니다.

        <template>
          <div class="form-group">
            <label :for="id">(( 레이블 ))</label>
            <!-- pay attention to v-bind="$attrs" -->
            <input
              :id="id"
              v-bind="$attrs"
              :value="value"
              class="base-input"
              @input="$emit('input', $event.target.value)"
            >
          </div>
        </template>
        
        <script>
        export default (
          name: 'BaseInput',
          inheritAttrs: false, // <- pay attention to this line
          props: ['value', 'label', 'id']
        );
        </script>

        다음을 사용할 수 있습니다. v-bind="$attrs" 에 직접 속성을 전달하고 소품을 대량으로 신고하지 않아도 됩니다. 또한 다음과 같은 옵션을 추가하는 것도 잊지 마세요. inheritAttrs: false 를 사용하여 루트 엘리먼트에 어트리뷰트를 전달하지 않도록 설정할 수 있습니다. 조금 더 나아가서 이 입력에 이벤트 리스너를 추가해야 한다면 어떻게 해야 할까요? 다시 말하지만, 소품이나 커스텀 이벤트로 처리할 수도 있지만 더 나은 해결책이 있습니다.

        <template>
          <div class="form-group">
            <label :for="id">(( 레이블 ))</label>
            <!-- pay attention to v-on="listeners" -->
            <input
              :id="id"
              v-bind="$attrs"
              :value="value"
              class="base-input"
              v-on="listeners"
            >
        </div>
        </template>
        
        <script>
        export default (
          name: 'BaseInput',
          inheritAttrs: false,
          props: ['value', 'label', 'id'],
          computed: (
            listeners() (
              return (
                ...this.$listeners,
                input: event => this.$emit('input', event.target.value)
              );
            )
          )
        );
        </script>

        리스너에 대한 컴포넌트를 반환하고 입력 리스너를 추가하는 새로운 계산된 프로퍼티가 있습니다. 계산된 입력은 다음과 같이 간단히 작성하여 사용합니다. v-on="청취자".

        생성된 후크와 와처를 함께 사용하는 대신 즉시 옵션과 함께 와처를 사용합니다.

        생성된(또는 마운트된) 훅에서 일부 데이터를 가져오는 경우가 많지만, 페이지 매김의 현재 페이지와 같이 속성이 변경될 때마다 해당 데이터를 가져와야 하는 경우가 있습니다. 어떤 사람들은 이런 식으로 기록하는 경향이 있습니다:

        물론 효과가 있지만... 최선의 접근 방식은 아니며 좋은 접근 방식도 아닙니다. 그래서 이것을 어떻게 리팩터링할 수 있는지, 그렇게 나쁘지 않은 접근법의 예를 살펴보겠습니다:

        위의 버전은 다른 메서드가 필요하지 않기 때문에 더 좋으며, watchedProperty를 변경하기 위해 호출해야 하는 메서드의 이름만 지정했습니다.

        더 나은 접근 방식:

        생성된 훅을 제거했습니다. '즉시' 옵션을 추가하면 관측이 시작된 직후(생성된 후크보다 조금 앞이고 beforeCreated보다 뒤에 있음) fetchData 메서드에서 해당 컴포넌트를 호출하게 되므로, 생성된 후크 대신 사용할 수 있습니다.

        Vue.js 팁 요약

        이 팁을 사용한다고 해서 애플리케이션이 완벽해지지는 않지만 다음과 같이 빠르게 개선됩니다. 코드 품질 향상. 또한 위의 예시에서 흥미로운 점을 찾으셨기를 바랍니다.

        이 중 일부는 글의 목적을 위해 단순화한 것입니다.

        자세히 읽어보세요:

        JavaScript는 완전히 죽었습니다. 인터넷의 어떤 남자

        가장 인기 있는 React 후크 자세히 살펴보기

        JavaScript를 사용할 수 있는 소프트웨어 프로젝트

  • 관련 문서

    소프트웨어 개발

    미래 지향적인 웹 앱 구축: The Codest의 전문가 팀이 제공하는 인사이트

    The Codest가 최첨단 기술로 확장 가능한 대화형 웹 애플리케이션을 제작하고 모든 플랫폼에서 원활한 사용자 경험을 제공하는 데 탁월한 성능을 발휘하는 방법을 알아보세요. Adobe의 전문성이 어떻게 디지털 혁신과 비즈니스를 촉진하는지 알아보세요...

    최신
    소프트웨어 개발

    라트비아에 본사를 둔 10대 소프트웨어 개발 기업

    최신 기사에서 라트비아 최고의 소프트웨어 개발 기업과 그들의 혁신적인 솔루션에 대해 알아보세요. 이러한 기술 리더들이 어떻게 귀사의 비즈니스를 향상시키는 데 도움을 줄 수 있는지 알아보세요.

    thecodest
    엔터프라이즈 및 스케일업 솔루션

    Java 소프트웨어 개발 필수 사항: 성공적인 아웃소싱을 위한 가이드

    The Codest로 효율성을 높이고 전문 지식을 활용하며 프로젝트 성공을 이끌 수 있는 성공적인 outsourcing Java 소프트웨어 개발에 대한 이 필수 가이드를 살펴보세요.

    thecodest
    소프트웨어 개발

    폴란드 아웃소싱을 위한 최고의 가이드

    폴란드에서 outsourcing가 급증한 것은 경제, 교육, 기술 발전으로 인한 IT 성장과 비즈니스 친화적인 환경이 조성된 덕분입니다.

    더코데스트
    엔터프라이즈 및 스케일업 솔루션

    IT 감사 도구 및 기술에 대한 완벽한 가이드

    IT 감사는 안전하고 효율적이며 규정을 준수하는 시스템을 보장합니다. 전체 기사를 읽고 그 중요성에 대해 자세히 알아보세요.

    The Codest
    야쿱 야쿠보비치 CTO & 공동 설립자

    지식창고를 구독하고 IT 분야의 전문 지식을 최신 상태로 유지하세요.

      회사 소개

      The Codest - 폴란드에 기술 허브를 둔 국제 소프트웨어 개발 회사입니다.

      영국 - 본사

      • 사무실 303B, 182-184 하이 스트리트 노스 E6 2JA
        영국 런던

      폴란드 - 현지 기술 허브

      • 파브리츠나 오피스 파크, 알레야
        포코주 18, 31-564 크라쿠프
      • 뇌 대사관, 콘스트럭터스카
        11, 02-673 바르샤바, 폴란드

        The Codest

      • 홈
      • 회사 소개
      • 서비스
      • Case Studies
      • 방법 알아보기
      • 채용 정보
      • 사전

        서비스

      • IT 자문
      • 소프트웨어 개발
      • 백엔드 개발
      • 프론트엔드 개발
      • Staff Augmentation
      • 백엔드 개발자
      • 클라우드 엔지니어
      • 데이터 엔지니어
      • 기타
      • QA 엔지니어

        리소스

      • 외부 소프트웨어 개발 파트너와의 협력에 대한 사실과 오해
      • 미국에서 유럽으로: 미국 스타트업이 유럽으로 이전을 결정하는 이유
      • 테크 오프쇼어 개발 허브 비교: 테크 오프쇼어 유럽(폴란드), 아세안(필리핀), 유라시아(터키)
      • CTO와 CIO의 주요 과제는 무엇인가요?
      • The Codest
      • The Codest
      • The Codest
      • Privacy policy
      • 웹사이트 이용 약관

      저작권 © 2025 by The Codest. 모든 권리 보유.

      ko_KRKorean
      en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese es_ESSpanish nl_NLDutch etEstonian elGreek ko_KRKorean