찾다
웹 프론트엔드CSS 튜토리얼VUE 구성 API가 Vue Mixins를 대체하는 방법

VUE 구성 API가 Vue Mixins를 대체하는 방법

VUE 구성 요소간에 코드 공유? Vue 2에 익숙하다면 Mixin을 사용하여이를 달성했을 수 있습니다. 그러나 새로운 구성 API (현재 VUE 2 용 플러그인으로 제공되며 VUE 3의 다가오는 기능)는 더 나은 솔루션을 제공합니다.

이 기사는 Mixin의 단점을 탐구하고 구성 API가 이러한 단점을 극복하고 VUE 응용 프로그램을보다 확장 가능하게 만드는 방법을 이해합니다.

Mixin에 대한 간단한 설명

다음 섹션에서 다루는 것이 중요하기 때문에 Mixin 모드를 빠르게 검토합시다.

일반적으로 VUE 구성 요소는 데이터, 메소드, 계산 속성 등과 같이 구현 해야하는 기능을 나타내는 다양한 속성을 갖는 JavaScript 객체로 정의됩니다.

 // mycomponent.js
내보내기 기본값 {
  데이터 : () => ({
    MyDataproperty : NULL
  }),
  방법 : {
    myMethod () {...}
  }
  // ...
}

구성 요소간에 동일한 속성을 공유하려면 공통 속성을 별도의 모듈로 추출 할 수 있습니다.

 // mymixin.js
내보내기 기본값 {
  데이터 : () => ({
    MysharedDataproperty : NULL
  }),
  방법 : {
    MysharedMethod () {...}
  }
}

이제 믹스 인 구성 속성에 할당 하여이 믹스 인을 사용하는 구성 요소 에이 믹스 인을 추가 할 수 있습니다. 런타임에 Vue는 구성 요소의 속성을 추가 된 믹스 인과 병합합니다.

 // 소비자 component.js
"./mymixin.js"에서 mymixin을 가져옵니다.

내보내기 기본값 {
  Mixins : [Mymixin],
  데이터 : () => ({
    mylocaldataproperty : null
  }),
  방법 : {
    mylocalmethod () {...}
  }
}

이 특정 예에서 런타임에 사용되는 구성 요소 정의는 다음과 같습니다.

 내보내기 기본값 {
  데이터 : () => ({
    MysharedDataproperty : Null,
    mylocaldataproperty : null
  }),
  방법 : {
    MysharedMethod () {...},
    mylocalmethod () {...}
  }
}

Mixin은 "유해한"것으로 간주됩니다.

2016 년 중반에 Dan Abramov는“Mixins는 해로운 고려”를 썼는데, 그는 논리를 재사용하기 위해 React 구성 요소에서 Mixins를 사용하여 논리를 방지하여 피하는 것을 옹호한다고 믿었습니다.

불행히도, 그가 React Mixin에 대해 언급 한 단점은 Vue에도 적용됩니다. 구성 API가 이러한 결점을 어떻게 극복하는지 이해하기 전에 이러한 결점을 살펴 보겠습니다.

명명 충돌

우리는 Mixin Mode가 런타임에 두 개의 객체를 어떻게 병합하는지 봅니다. 그들이 모두 같은 이름의 재산을 공유하면 어떻게됩니까?

 const mixin = {
  데이터 : () => ({
    MyProp : NULL
  })
}

내보내기 기본값 {
  Mixins : [Mixin],
  데이터 : () => ({
    // 같은 이름!
    MyProp : NULL
  })
}

이것이 합병 전략이 시작되는 곳입니다. 구성 요소에 동일한 이름의 여러 옵션이 포함되어있을 때 발생하는 일이 발생하는 일련의 규칙입니다.

VUE 구성 요소의 기본값 (그러나 구성 가능)은 로컬 옵션이 Mixin 옵션을 무시할 수 있도록 명시합니다. 그러나 예외가 있습니다. 예를 들어, 동일한 유형의 여러 수명주기 후크가있는 경우 이러한 후크가 후크 어레이에 추가되고 모든 후크가 순차적으로 호출됩니다.

실제 오류가 발생하지 않더라도 여러 구성 요소와 Mixins간에 명명 된 속성을 처리 할 때 코드를 작성하는 것이 점점 어려워 질 수 있습니다. 이는 NPM 패키지로서의 타사 믹스 인이면 충돌을 일으킬 수있는 이름이 지정된 특성입니다.

암시 적 의존성

Mixin과 그것을 사용하는 구성 요소 사이에는 계층 적 관계가 없습니다. 이는 구성 요소가 Mixin (예 : MysharedDataproperty)에 정의 된 데이터 속성을 사용할 수 있지만, Mixin은 구성 요소 (예 : Mylocaldataproperty)에 정의 된 데이터 속성을 가정 할 수 있습니다. 이는 Mixin을 사용하여 입력 유효성 검사를 공유 할 때 일반적입니다. Mixin은 구성 요소가 자체 유효성 검사 방법에서 사용할 입력 값을 가질 것으로 기대할 수 있습니다.

그러나 이것은 문제를 일으킬 수 있습니다. 나중에 구성 요소를 리팩터링하고 Mixin이 요구하는 변수의 이름을 변경하려면 어떻게됩니까? 구성 요소에서 어떤 문제도 알지 못합니다. 코드 검사관도 찾지 못할 것입니다. 런타임에 오류 만 볼 수 있습니다.

이제 많은 믹스 인이 포함 된 구성 요소를 상상해보십시오. 로컬 데이터 속성을 리팩터링 할 수 있습니까, 아니면 믹스 인을 깨뜨릴 수 있습니까? 어떤 믹스 인? 우리는 모든 믹스 인을 수동으로 검색해야합니다.

Mixin에서 마이그레이션하십시오

Dan의 기사는 고급 구성 요소, 유틸리티 방법 및 기타 구성 요소 조합 패턴을 포함하여 Mixin의 대안을 제공합니다.

Vue는 여러면에서 React와 비슷하지만 그가 제안한 대체 패턴은 Vue로 잘 전환되지 않습니다. 따라서이 게시물은 2016 년 중반에 작성되었지만 VUE 개발자는 그 이후로 Mixin 문제를 지속적으로하고 있습니다.

지금까지. Mixin의 단점은 구성 API의 주요 동기 요인 중 하나입니다. 그것이 믹스 인 문제를 극복하는 방법을 이해하기 전에 그것이 어떻게 작동하는지 간단히 살펴 보겠습니다.

구성 API 충돌 코스

구성 API의 핵심 아이디어는 구성 요소 (예 : 상태, 메소드, 계산 속성 등)의 함수를 객체 속성으로 정의하는 대신 새 설정 함수에서 리턴 된 JavaScript 변수로 정의된다는 것입니다.

다음은 "카운터"함수를 정의하는 구성 API를 사용하여 정의 된 VUE 2 구성 요소의 전형적인 예입니다.

 //counter.vue
내보내기 기본값 {
  데이터 : () => ({
    카운트 : 0
  }),
  방법 : {
    증분 () {
      this.count;
    }
  },
  계산 : {
    double () {
      this.count * 2;
    }
  }
}

다음은 Composition API를 사용하여 정의 된 동일한 구성 요소입니다.

 // 카운터. vue
"vue"에서 가져 오기 {ref, 계산};

내보내기 기본값 {
  설정() {
    const count = ref (0);
    const double = computed (() => count.value * 2)
    함수 증분 () {
      count.value;
    }
    반품 {
      세다,
      더블,
      증가
    }
  }
}

먼저 REF 함수를 가져 왔는데,이를 통해 데이터 변수와 거의 동일한 기능을 갖는 응답 변수를 정의 할 수 있습니다. 컴퓨터 기능에 대해서도 마찬가지입니다.

증분 메소드는 응답하지 않으므로 정상적인 JavaScript 기능으로 선언 할 수 있습니다. 카운트 응답 변수의 값을 변경하려면 하위 단체 값을 변경해야합니다. REF로 생성 된 응답 변수는 통과시 응답 성을 유지하기 위해 개체가되어야하기 때문입니다.

심판의 작동 방식에 대한 자세한 이해를 위해 VUE Composition API 문서를 참조하는 것이 가장 좋습니다.

이러한 함수를 정의한 후 설정 함수에서 반환합니다. 위의 두 구성 요소의 함수에는 차이가 없습니다. 우리가 한 것은 대체 API를 사용하는 것뿐입니다.

팁 : 구성 API는 VUE 3의 핵심 기능이지만 VUE 2에서 NPM 플러그인 @vue/composition-api를 사용할 수도 있습니다.

코드 추출

구성 API의 첫 번째 명백한 장점은 논리 추출의 용이성입니다.

구성 API를 사용하여 정의하는 기능이 JavaScript 모듈 usecounter에 있도록 위에서 정의 된 구성 요소를 리팩터링하겠습니다. (함수 설명으로 "사용"을 사용하는 접두사는 구성 API의 명명 규칙입니다.)

 // usecounter.js
"vue"에서 가져 오기 {ref, 계산};

내보내기 기본 기능 () {
  const count = ref (0);
  const double = computed (() => count.value * 2)
  함수 증분 () {
    count.value;
  }
  반품 {
    세다,
    더블,
    증가
  }
}

코드 재사용

구성 요소 에서이 함수를 사용하기 위해 모듈을 구성 요소 파일로 가져 와서 호출합니다 (가져 오기는 기능 임). 이것은 우리가 정의하는 변수를 반환 한 다음 설정 함수에서 반환 할 수 있습니다.

 // mycomponent.js
"./usecounter.js"에서 usecounter를 가져 오기;

내보내기 기본값 {
  설정() {
    const {count, double, ycrement} = usecounter ();
    반품 {
      세다,
      더블,
      증가
    }
  }
}

처음에는 조금 길고 의미가없는 것처럼 보이지만이 패턴이 이전에 본 믹스 인 문제를 어떻게 극복하는지 살펴 보겠습니다.

명명 갈등 ... 해결되었습니다!

우리는 Mixin이 사용 구성 요소의 이름과 동일한 이름 일 수있는 속성을 사용할 수 있거나 사용 구성 요소가 사용하는 다른 Mixin의 속성과 더 은폐 할 수있는 속성을 사용할 수 있습니다.

이 문제는 구성 API에 존재하지 않기 때문에 합성 기능에서 반환 된 상태 또는 방법을 명시 적으로 명시 해야하기 때문입니다.

 내보내기 기본값 {
  설정 () {
    const {somevar1, somemethod1} = usecomptunction1 ();
    const {somevar2, somemethod2} = usecomptunction2 ();
    반품 {
      somevar1,
      somemethod1,
      somevar2,
      somemethod2
    }
  }
}

이름 지정 충돌은 다른 JavaScript 변수와 같은 방식으로 해결됩니다.

암시 적 의존성 ... 해결되었습니다!

또한 Mixin이 구성 요소에 정의 된 데이터 속성을 사용할 수 있다는 사실을 알았으므로 코드를 깨지기 쉽고 이해하기 어렵게 만듭니다.

조합 기능은 또한 구성 요소에 정의 된 로컬 변수를 호출 할 수 있습니다. 그러나 차이점은이 변수가 이제 결합 된 기능으로 명시 적으로 전달되어야한다는 것입니다.

 "./usecomptunction"에서 usecomptionction 가져 오기;

내보내기 기본값 {
  설정 () {
    // 조합 함수에 사용해야하는 로컬 값 const mylocalval = ref (0);

    // 매개 변수로 명시 적으로 전달되어야합니다. const {...} = usecomptunction (mylocalVal);
  }
}

요약

믹스 인 모드는 표면에서 매우 안전 해 보입니다. 그러나 코드의 취약성을 증가시키고 함수를 이해하는 능력을 가리키는 방식이 증가하기 때문에 객체를 병합하여 코드를 공유하는 것이 방지가됩니다.

Composition API에 대한 가장 영리한 점은 VUE가 기본 JavaScript에 내장 된 보안 측정에 의존하여 변수를 기능 및 모듈 시스템으로 전달하는 것과 같은 코드를 공유 할 수 있다는 것입니다.

이것은 구성 API가 모든면에서 VUE의 클래식 API보다 우수하다는 것을 의미합니까? 아닙니다. 대부분의 경우 클래식 API를 고수 할 수 있습니다. 그러나 코드를 재사용 할 계획이라면 구성 API가 의심 할 여지없이 더 나은 선택입니다.

위 내용은 VUE 구성 API가 Vue Mixins를 대체하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
CSS 회전 목마 내부의 스크롤 구동 애니메이션CSS 회전 목마 내부의 스크롤 구동 애니메이션May 16, 2025 am 09:50 AM

이봐, 스크롤 지역과 함께 작동하는 상당히 새로운 CSS 기능이 없습니까? 네, 스크롤 구동 애니메이션입니다. CSS 회전 목마의 항목을 스크롤하는 동안 애니메이션을 트리거 할 수 없다는 의미입니까?

CSS 포함 : 프로젝트에 적합한 방법을 선택합니다CSS 포함 : 프로젝트에 적합한 방법을 선택합니다May 16, 2025 am 12:02 AM

TheBestMethodforincludingcssdependsonProjectSizeanDocplexity : 1) ForlargerProjects, useexternalcssforbettermainabilitableandableabilitable.2) ForsMallerProjects, 내부 CSSSSISSUITSIUT ABOIDEXTRAHTTPREQUESTS.ALWAYSIDERMANGERMANDIFIDANIDITION

불가능한 문제 해결불가능한 문제 해결May 15, 2025 am 10:32 AM

당신이 결코 생각하지 못한 다른 것으로 판명되는 불가능한 문제 중 하나를 문제 해결하는 것이 어떻게 보이는지.

@keyframes vs CSS 전환 : 차이점은 무엇입니까?@keyframes vs CSS 전환 : 차이점은 무엇입니까?May 14, 2025 am 12:01 AM

@keyframesandcsstransitionsdifferincomplexity :@keyframesallowsfordeTailEdanimationsections, whilecsStransitsimplestateChanges.UsecsStransitionSforHovereffects likeToncolorChanges 및@keyframesforintricateanimationspinners.

정적 사이트 컨텐츠 관리에 페이지 CMS 사용정적 사이트 컨텐츠 관리에 페이지 CMS 사용May 13, 2025 am 09:24 AM

알고 있습니다. 컨텐츠 관리 시스템 옵션이 수많은 톤을 사용할 수 있으며, 여러 번 테스트했지만 실제로는 아무도 없었습니다. y ' 이상한 가격 책정 모델, 어려운 커스터마이즈, 일부는 전체가되었습니다.

HTML의 CSS 파일 연결에 대한 궁극적 인 안내서HTML의 CSS 파일 연결에 대한 궁극적 인 안내서May 13, 2025 am 12:02 AM

HTML의 일부에서 요소를 사용하여 CSS 파일을 HTML에 연결하면 달성 할 수 있습니다. 1) 태그를 사용하여 로컬 CSS 파일을 연결하십시오. 2) 여러 개의 태그를 추가하여 여러 CSS 파일을 구현할 수 있습니다. 3) 외부 CSS 파일은 다음과 같은 절대 URL 링크를 사용합니다. 4) 파일 경로 및 CSS 파일로드 순서의 올바른 사용을 확인하고 성능을 최적화하면 CSS Preprocessor를 사용하여 파일을 병합 할 수 있습니다.

CSS Flexbox vs Grid : 포괄적 인 검토CSS Flexbox vs Grid : 포괄적 인 검토May 12, 2025 am 12:01 AM

Flexbox 또는 그리드 선택은 레이아웃 요구 사항에 따라 다릅니다. 1) Flexbox는 탐색 표시 줄과 같은 1 차원 레이아웃에 적합합니다. 2) 그리드는 매거진 레이아웃과 같은 2 차원 레이아웃에 적합합니다. 두 사람은 프로젝트에 사용하여 레이아웃 효과를 향상시킬 수 있습니다.

CSS 파일 포함 방법 : 방법 및 모범 사례CSS 파일 포함 방법 : 방법 및 모범 사례May 11, 2025 am 12:02 AM

CSS 파일을 포함시키는 가장 좋은 방법은 태그를 사용하여 HTML 부분에 외부 CSS 파일을 소개하는 것입니다. 1. 태그를 사용하여 외부 CSS 파일을 소개합니다. 2. 작은 조정의 경우 인라인 CSS를 사용할 수 있지만주의해서 사용해야합니다. 3. 대규모 프로젝트는 SASS와 같은 CSS 전 처리기를 사용하여 @Import를 통해 다른 CSS 파일을 가져올 수 있습니다. 4. 성능의 경우 CSS 파일을 병합하고 CDN을 사용해야하고 CSSNANO와 같은 도구를 사용하여 압축해야합니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

VSCode Windows 64비트 다운로드

VSCode Windows 64비트 다운로드

Microsoft에서 출시한 강력한 무료 IDE 편집기

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경