찾다
웹 프론트엔드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 스타일Apr 23, 2025 am 11:04 AM

CSS가있는 커스텀 커서는 훌륭하지만 JavaScript를 사용하여 다음 단계로 가져갈 수 있습니다. JavaScript를 사용하면 커서 상태를 전환하고 커서 내에 동적 텍스트를 배치하고 복잡한 애니메이션을 적용하며 필터를 적용 할 수 있습니다.

Worlds Collide : 스타일 쿼리를 사용한 KeyFrame Collision DetectionWorlds Collide : 스타일 쿼리를 사용한 KeyFrame Collision DetectionApr 23, 2025 am 10:42 AM

2025 년에 서로를 ricocheting하는 요소가있는 대화식 CSS 애니메이션은 CSS에서 Pong을 구현할 필요가 없지만 CSS의 유연성과 힘이 증가하는 것은 LEE의 의심을 강화합니다.

UI 효과를 위해 CSS 배경 필터 사용UI 효과를 위해 CSS 배경 필터 사용Apr 23, 2025 am 10:20 AM

CSS 배경 필터 속성을 사용하여 사용자 인터페이스 스타일에 대한 팁과 요령. 여러 요소들 사이에 필터를 배경으로 배경으로 배경으로하는 방법을 배우고 다른 CSS 그래픽 효과와 통합하여 정교한 디자인을 만듭니다.

미소?미소?Apr 23, 2025 am 09:57 AM

글쎄, SVG '의 내장 애니메이션 기능은 계획대로 이상 사용되지 않았다. 물론 CSS와 JavaScript는 부하를 운반 할 수있는 것 이상이지만 Smil이 이전과 같이 물에서 죽지 않았다는 것을 아는 것이 좋습니다.

'예쁜'은 보는 사람의 눈에 있습니다'예쁜'은 보는 사람의 눈에 있습니다Apr 23, 2025 am 09:40 AM

예, 텍스트-랩을위한 점프 : Safari Technology Preview의 예쁜 착륙! 그러나 Chromium 브라우저에서 작동하는 방식과는 다른 점을 조심하십시오.

CSS- 트릭 연대기 XLIIICSS- 트릭 연대기 XLIIIApr 23, 2025 am 09:35 AM

이 CSS- 트릭 업데이트는 Almanac, 최근 Podcast 출연, 새로운 CSS 카운터 가이드 및 귀중한 컨텐츠에 기여하는 몇 가지 새로운 저자의 추가 진전을 강조합니다.

Tailwind ' s @apply 기능은 소리보다 낫습니다Tailwind ' s @apply 기능은 소리보다 낫습니다Apr 23, 2025 am 09:23 AM

대부분의 경우 사람들은 Tailwind ' S 단일 프로퍼 유틸리티 중 하나 (단일 CSS 선언을 변경)와 함께 Tailwind ' s @apply 기능을 보여줍니다. 이런 식으로 선보일 때 @apply는 전혀 약속하는 소리가 들리지 않습니다. 그래서 Obvio

릴리스가없는 느낌 : 제정신 배치를 향한 여정릴리스가없는 느낌 : 제정신 배치를 향한 여정Apr 23, 2025 am 09:19 AM

바보처럼 배포하는 것은 배포하는 데 사용하는 도구와 복잡성에 대한 보상과 복잡성이 추가됩니다.

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 통합 개발 환경

DVWA

DVWA

DVWA(Damn Vulnerable Web App)는 매우 취약한 PHP/MySQL 웹 애플리케이션입니다. 주요 목표는 보안 전문가가 법적 환경에서 자신의 기술과 도구를 테스트하고, 웹 개발자가 웹 응용 프로그램 보안 프로세스를 더 잘 이해할 수 있도록 돕고, 교사/학생이 교실 환경 웹 응용 프로그램에서 가르치고 배울 수 있도록 돕는 것입니다. 보안. DVWA의 목표는 다양한 난이도의 간단하고 간단한 인터페이스를 통해 가장 일반적인 웹 취약점 중 일부를 연습하는 것입니다. 이 소프트웨어는

mPDF

mPDF

mPDF는 UTF-8로 인코딩된 HTML에서 PDF 파일을 생성할 수 있는 PHP 라이브러리입니다. 원저자인 Ian Back은 자신의 웹 사이트에서 "즉시" PDF 파일을 출력하고 다양한 언어를 처리하기 위해 mPDF를 작성했습니다. HTML2FPDF와 같은 원본 스크립트보다 유니코드 글꼴을 사용할 때 속도가 느리고 더 큰 파일을 생성하지만 CSS 스타일 등을 지원하고 많은 개선 사항이 있습니다. RTL(아랍어, 히브리어), CJK(중국어, 일본어, 한국어)를 포함한 거의 모든 언어를 지원합니다. 중첩된 블록 수준 요소(예: P, DIV)를 지원합니다.

SublimeText3 영어 버전

SublimeText3 영어 버전

권장 사항: Win 버전, 코드 프롬프트 지원!

SublimeText3 중국어 버전

SublimeText3 중국어 버전

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