와, 페이지가 너무 길어요! Vue 2.0이 완전히 다르다는 뜻인가요? 처음부터 배워야 하나요? Vue 1.0 프로젝트를 마이그레이션하는 것이 불가능합니까?
아닌 사실을 알려드리게 되어 매우 기쁩니다! API와 핵심 개념의 거의 90%가 변경되지 않았습니다. 이 섹션에는 많은 정교함과 많은 마이그레이션 예제가 포함되어 있기 때문에 약간 깁니다. 걱정하지 마세요.
이 섹션을 처음부터 끝까지 읽을 필요는 없습니다!
프로젝트 마이그레이션은 어디서 시작해야 하나요?
1. 먼저 현재 프로젝트에서 migration tool
을 실행합니다. 우리는 간단한 명령줄 도구를 사용하여 고급 Vue 업그레이드 프로세스를 단순화하기 위해 세심한 주의를 기울였습니다. 도구가 레거시 기능을 식별하면 이를 알리고 추가 정보에 대한 링크와 함께 권장 사항을 제시합니다.
2. 그런 다음 이 페이지의 사이드바에 나열된 콘텐츠를 찾아보세요. 일부 타이틀이 프로젝트에 영향을 미치지만 마이그레이션 도구가 메시지를 표시하지 않는 경우 프로젝트를 확인하세요.
3. 프로젝트에 테스트 코드가 있는 경우 이를 실행하고 여전히 실패하는 부분을 확인하세요. 테스트 코드가 없으면 브라우저에서 애플리케이션을 열고 탐색하여 오류나 경고에 주의하세요.
4. 이제 애플리케이션이 완전히 마이그레이션되었습니다. 더 자세히 알아보고 싶다면 이 페이지의 나머지 부분을 읽어보거나 소개 섹션에서 처음부터 시작하여 새로운 문서와 개선된 지침을 자세히 알아보세요. 일부 핵심 개념에 이미 익숙하기 때문에 많은 섹션이 생략되었습니다.
Vue 1.x 버전 애플리케이션을 2.0으로 마이그레이션하는 데 얼마나 걸리나요?
이는 여러 가지 요인에 따라 달라집니다.
신청 규모에 따라 다릅니다(중소 규모는 기본적으로 하루 안에 완료 가능).
주의가 산만해지는 횟수에 따라 2.0의 가장 멋진 새 기능을 시작하세요. 시간을 알 수 없습니다. 2.0 애플리케이션을 구축할 때 이런 일이 자주 발생합니다!
사용하는 이전 기능에 따라 다릅니다. 대부분은 찾기 및 바꾸기를 통해 업그레이드할 수 있지만 일부는 시간이 걸릴 수 있습니다. 모범 사례를 따르지 않으면 Vue 2.0은 이를 따르도록 최선을 다할 것입니다. 이는 프로젝트의 장기적인 운영에 좋지만 상당한 리팩토링을 의미할 수도 있습니다(비록 리팩토링이 필요한 부분 중 일부는 더 이상 사용되지 않을 수 있음).
Vue 2로 업그레이드하는 경우 Vuex와 Vue Router도 동시에 업그레이드해야 하나요?
Vue Router 2만 Vue 2와 호환되므로 Vue Router를 업그레이드해야 하며, 이를 처리하려면 Vue Router 마이그레이션 방법을 따라야 합니다. 다행스럽게도 대부분의 애플리케이션에는 라우터 관련 코드가 많지 않으므로 마이그레이션은 아마도 1시간 이상 걸리지 않을 것입니다.
Vuex의 경우 버전 0.8+는 Vue 2와 계속 호환되므로 일부는 강제로 업그레이드할 필요가 없습니다. 지금 업그레이드해야 하는 유일한 이유는 모듈 및 축소된 상용구와 같은 Vuex 2의 새로운 고급 기능을 활용하려는 경우입니다.
Template
Fragment Instance Removed
모든 구성 요소에는 루트 요소가 하나만 있어야 합니다. 다음과 같은 템플릿이 있는 경우 조각 인스턴스는 더 이상 허용되지 않습니다.
<p>foo</p>
<p>bar</p>
다음과 같이 전체 콘텐츠를 새 요소로 간단히 래핑하는 것이 더 좋습니다.
<div>
<p>foo</p>
<p>bar</p>
</div>
업그레이드 방법
업그레이드 후 엔드투엔드 테스트 스위트를 실행하거나 애플리케이션을 실행하고 콘솔 경고를 확인하여 여러 루트 요소가 있는 템플릿을 알아보세요.
在代码库中运行迁移工具来找出那些使用旧有参数顺序的示例。注意,如果你将你的 index 参数命名为一些不通用的名字 (例如 position 或 num
대신 새로운 beforeCreate 후크 함수를 사용하세요. 기본적으로 beforeCreate와 init는 완전히 동일합니다. init의 이름은 다른 수명 주기 메서드의 이름과 일치하도록 변경되었습니다.
🎜 업그레이드 방법🎜🎜코드 베이스에서 마이그레이션 도구 실행 이 후크 기능을 사용하여 모든 예제를 찾으십시오. 🎜🎜🎜🎜🎜
준비교체🎜🎜 대신 새로운 마운트 후크 기능을 사용하세요. mounted를 사용한다고 해서 후크 함수에 this.$el이 문서에 있다는 것을 보장하지는 않는다는 점에 유의해야 합니다. Vue.nextTick/vm.$nextTick도 이 목적으로 도입되어야 합니다. 예: 🎜
props: {
username: {
type: String,
coerce: function (value) {
return value
.toLowerCase()
.replace(/\s+/, '-')
}
}
}
속성 이름/키가 포함된 경우 이전에 객체 순회 매개변수 순서는 ( 이름, 값). 이제 (값, 이름)이 일반 객체 반복자(예: lodash)와 일관성을 유지합니다.
🎜 업그레이드 방법🎜🎜코드에서 마이그레이션 도구 실행 base를 사용하여 이전 인수 순서를 사용하는 예제를 찾습니다. 주요 매개변수에 특이한 이름(예: name 또는 property)을 지정하면 마이그레이션 도구가 이를 표시하지 않습니다. 🎜🎜🎜🎜🎜
$index 및 $key제거🎜🎜가 $index 및 $key는 v-for의 명시적 정의를 위해 암시적으로 선언된 변수입니다. 이를 통해 Vue 개발 경험이 많지 않은 개발자가 코드를 더 잘 읽을 수 있고 중첩 루프를 처리할 때 더 깔끔한 동작을 수행할 수 있습니다. 🎜
🎜 업그레이드 방법🎜🎜코드에서 마이그레이션 도구 실행 제거된 변수를 사용하는 예를 찾아보세요. 찾을 수 없는 경우 콘솔 오류에서 찾아볼 수도 있습니다(예: Uncaught ReferenceError: $index가 정의되지 않음). 🎜🎜🎜🎜🎜
트랙바이< span style="font-size: 18px;">교체🎜🎜track-by가 로 대체되었습니다. key 인 경우 다른 속성처럼 작동하며 v-bind 또는 : 접두사가 없으면 문자열로 처리됩니다. 대부분의 경우 정적 키를 전체 표현식이 포함된 동적 바인딩으로 바꿔야 합니다. 예를 들어, 🎜
🎜업그레이드 방법🎜🎜마이그레이션 실행 도구 coerce 옵션이 포함된 인스턴스를 찾습니다. 🎜🎜🎜🎜🎜
twoWay Prop의 매개변수removed🎜🎜Props는 이제 한 방향으로만 전달할 수 있습니다. 상위 구성 요소에 반대 효과를 주기 위해 하위 구성 요소는 암시적 양방향 바인딩에 의존하는 대신 명시적으로 이벤트를 전달해야 합니다. 자세한 내용은 다음을 참조하세요. 🎜
🎜업그레이드 방법🎜🎜 이전 도구를 실행하여 .once 및 .sync 수정자를 사용하여 인스턴스를 찾습니다. 🎜🎜🎜🎜🎜
속성 수정 지원 중단됨 🎜 🎜구성 요소 내의 소품을 수정하는 것은 안티 패턴입니다(권장하지 않음). 예를 들어, 먼저 prop을 선언한 다음 this.myProp = 'someOtherValue'를 통해 구성 요소에서 prop의 값을 변경합니다. 렌더링 메커니즘에 따라 상위 구성 요소가 다시 렌더링되면 하위 구성 요소의 내부 prop 값도 덮어쓰게 됩니다. 🎜🎜대부분의 경우 prop 값 변경은 다음 옵션으로 대체할 수 있습니다. 🎜
🎜 data 속성을 통해 prop을 사용하여 기본값을 설정합니다. 데이터 속성의 . 🎜
🎜계산된 속성을 통해. 🎜
🎜업그레이드 방법🎜🎜종료 테스트를 실행하고 소품 수정에 대한 콘솔 경고 정보를 확인하세요. 🎜🎜🎜🎜🎜
루트 인스턴스 교체에 대한 소품🎜🎜루트 인스턴스(예: new Vue({ ... })로 생성된 인스턴스)의 경우 대신 propsData만 사용할 수 있습니다. 소품 . 🎜
🎜 업그레이드 방법🎜🎜종단 간 테스트를 실행하면 실패한 테스트가 팝업되어 props를 사용하는 루트 인스턴스가 만료되었음을 알려줍니다. . 🎜🎜
🎜v-bind🎜🎜🎜 참/거짓 값 변경🎜🎜🎜🎜🎜 2.0에서 v-bind를 사용하는 경우 null, undefine 및 false만 false로 간주됩니다. 이는 0과 빈 문자열이 참 값으로 렌더링된다는 것을 의미합니다. 예를 들어 v-bind:draggable="''"는 draggable="true"로 렌더링됩니다. 🎜🎜열거 속성의 경우 위의 false 값 외에도 "false" 문자열도 attr="false"로 렌더링됩니다. 🎜
🎜다른 후크 기능(예: v-if 및 v-show)의 경우 참과 거짓을 판단하는 js의 일반 규칙을 따릅니다. 가치. 🎜
🎜🎜🎜🎜업그레이드 방법🎜🎜🎜🎜종단 간 테스트를 실행하세요. 이번 업그레이드로 인해 앱의 일부가 영향을 받을 수 있는 경우 실패한 테스트가 표시됩니다🎜🎜🎜🎜🎜
🎜v-on을 사용하여 기본 이벤트 변경 모니터링🎜🎜🎜🎜지금 구성 요소에서 v-on을 사용하면 맞춤 이벤트($emit를 사용하여 구성 요소에 의해 트리거되는 이벤트)만 수신됩니다. 루트 요소의 기본 이벤트를 듣고 싶다면 다음과 같은 .native 수정자를 사용할 수 있습니다. 코드 베이스에서 이 후크 기능을 사용하는 모든 예를 알아보세요. 🎜🎜
Debounce는 한때 Ajax 요청 및 기타 요청을 제어하는 데 사용되었습니다. 작업. Vue에서 v-model의 debounce 속성 매개변수를 사용하면 몇 가지 간단한 경우에 이러한 제어를 매우 쉽게 수행할 수 있습니다. 하지만 실제로 이는 시간이 많이 걸리는 작업 자체를 제어하기보다는
상태 업데이트
의 빈도를 제어하기 위한 것입니다. 이는 작은 차이이지만 애플리케이션이 성장함에 따라 제한될 것입니다. 검색 프롬프트 디자인 시 제한 사항 예시:
debounce 매개변수를 사용하면 "입력 중" 상태를 관찰할 수 없습니다. 입력 상태를 실시간으로 감지할 수 없기 때문입니다. 그러나 Vue에서 debounce를 분리하면 제어하려는 작업만 지연할 수 있으므로 이러한 제한을 피할 수 있습니다.
이 접근 방식의 또 다른 장점은 다음과 같습니다. 함수를 래핑할 때 실행 시간이 동일할 때 지연 시간만큼 더 오랜 시간 동안 대기하게 됩니다. 예를 들어, 검색 제안을 제공할 때 제안을 제공하기 전에 사용자가 일정 시간 동안 입력을 멈출 때까지 기다려야 하는데 이는 매우 좋지 않은 경험입니다. 사실 이때는
throttling
기능을 사용하는 것이 더 적합합니다. 이제 lodash와 같은 라이브러리를 자유롭게 사용할 수 있으므로 제한을 사용하여 프로젝트를 빠르게 리팩터링할 수 있습니다. 🎜🎜🎜🎜🎜업그레이드 경로🎜🎜🎜🎜debounce 매개변수를 사용하여 🎜migration 도구🎜를 실행하세요. 🎜🎜🎜🎜🎜
🎜🎜 lazy 또는 number 매개변수와 함께 v-model을 사용하세요. 교체 🎜🎜🎜🎜 이제 lazy 및 number 매개변수가 수정자로 사용되어 다음 대신 더 명확해 보입니다. 🎜
<p v-for="item in items" v-bind:ref="'item' + item.id"></p>
🎜이제 🎜
<p v-for="item in items" ref="items"></p>
🎜🎜🎜🎜Upgrade method🎜🎜🎜🎜 🎜migration 도구🎜를 실행하여 더 이상 사용되지 않는 매개변수를 찾으세요. 🎜🎜
v-model 인라인 값제거value 的v-model移除
v-model 不再以内联 value 方式初始化的初值了,显然他将以实例的 data 相应的属性作为真正的初值。
这意味着以下元素:
<p v-if="foo">Foo</p>
<p v-else v-show="bar">Not foo, but bar</p>
在 data 选项中有下面写法的:
<p v-if="foo">Foo</p>
<p v-if="!foo && bar">Not foo, but bar</p>
将渲染 model 为 ‘bar’ 而不是 ‘foo’ 。同样,对 <textarea> 已有的值来说:
// Todos
// ...
created: function () {
eventHub.$on('add-todo', this.addTodo)
eventHub.$on('delete-todo', this.deleteTodo)
},
// 最好在组件销毁前
// 清除事件监听
beforeDestroy: function () {
eventHub.$off('add-todo', this.addTodo)
eventHub.$off('delete-todo', this.deleteTodo)
},
methods: {
addTodo: function (newTodo) {
this.todos.push(newTodo)
},
deleteTodo: function (todoId) {
this.todos = this.todos.filter(function (todo) {
return todo.id !== todoId
})
}
}
🎜 요소가 모델을 'foo' 대신 'bar'로 렌더링한다는 의미입니다. 마찬가지로 <textarea>의 기존 값의 경우: 🎜
<input v-on:keyup="doStuff | debounce 500">
🎜는 text의 초기 값이 "hello world"🎜
🎜🎜업그레이드 방법 🎜 🎜업그레이드 후 엔드투엔드 테스트를 실행하고 v-model 인라인 매개변수🎜🎜🎜🎜🎜에 대한 🎜콘솔 경고에 주의하세요.
🎜🎜v-model🎜🎜 with v-for 반복된 기본 값 제거 🎜🎜이와 같이 작성하면 유효하지 않습니다. 🎜
methods: {
doStuff: function () {
// ...
}
}
🎜<input>가 다음으로 컴파일되기 때문입니다. 다음과 유사한 Node.js 코드: 🎜
<input v-on:keyup="doStuff">
🎜이렇게 하면 v-model의 양방향 바인딩이 여기서 유효하지 않습니다. str을 반복기의 다른 값에 할당하는 것은 함수 내부의 변수일 뿐이므로 쓸모가 없습니다. 🎜🎜대안은 v-model이 객체의 필드를 동기식으로 업데이트할 수 있도록 객체 배열을 사용할 수 있다는 것입니다. 예: 🎜
단순화를 위해 v-el 및 v-ref 구성요소 인스턴스의 $refs를 통해 호출할 수 있는 ref 속성으로 병합됩니다. 이는 v-el:my-element가 다음과 같이 작성됨을 의미합니다: ref="myElement" 및 v-ref:my-comComponent은 다음과 같습니다: ref="myComponent". 일반 요소에 바인딩된 경우 ref는 DOM 요소를 참조합니다. 구성 요소에 바인딩된 경우 ref는 구성 요소 인스턴스입니다.
🎜v-ref는 더 이상 지시어가 아닌 특수 속성이기 때문에 동적으로 정의할 수도 있습니다. 이는 v-for와 결합할 때 유용합니다: 🎜
var self = this
self.users.filter(function (user) {
var searchRegex = new RegExp(self.searchQuery, 'i')
return user.isActive && (
searchRegex.test(user.name) ||
searchRegex.test(user.email)
)
})
🎜이전에는 v-el/v-ref 및 v와 함께 사용됨 -for는 각 요소에 특정 이름을 지정할 수 있는 방법이 없기 때문에 DOM 배열 또는 구성 요소 배열을 생성합니다. 여전히 이 작업을 수행하고 모든 요소에 동일한 ref를 제공할 수 있습니다. 🎜
<p v-for="user in users | orderBy 'name'">{{ user.name }}</p>
🎜1.x와 달리 $refs는 렌더링 중에 등록/업데이트되기 때문에 응답하지 않습니다. 변경 사항을 수신하고 반복적으로 렌더링하는 것만으로 반응성을 높일 수 있습니다. 🎜🎜한편, $refs는 주로 js 프로그램에서 액세스하도록 설계되었으므로 템플릿에 너무 많이 의존하는 것은 권장되지 않습니다. 이는 인스턴스 외부에서 인스턴스 상태에 액세스하는 것을 의미하며 이는 Vue의 데이터 기반 사고에 어긋납니다. 🎜
🎜 업그레이드 방법🎜🎜 이전 도구를 실행하여 인스턴스 v-el 및 v-ref . 🎜🎜🎜🎜🎜
v-showv-else 사용 제거🎜🎜v -else는 v-show 이후에 더 이상 사용할 수 없습니다. 대신 v-if의 음수 분기에 v-show를 사용하세요. 예를 들어, 🎜
<p v-for="user in orderedUsers">{{ user.name }}</p>
🎜업그레이드 방법🎜🎜이전 도구는 v-else 및 v-show가 인스턴스에 존재하는지 확인합니다. 🎜🎜
사용자 지정 지시문 Simplification
새 버전에서는 지시문의 사용 범위가 크게 줄었습니다. 이제 지시문은 하위 수준 DOM 작업에만 사용됩니다. 대부분의 경우 코드 재사용을 위한 추상화 계층으로 구성 요소를 사용하는 것이 가장 좋습니다.
중요한 변경 사항은 다음과 같습니다.
명령에 더 이상 인스턴스가 없습니다. 즉, 지시문의 후크 기능에 더 이상 this 인스턴스가 없습니다. 대신 매개변수에 필요한 모든 데이터를 적용할 수 있습니다. 꼭 필요한 경우 el을 통해 인스턴스에 액세스할 수 있습니다. this 。替代的是,你可以在参数中接受你需要的任何数据。如果确实需要,可以通过 el 来访问实例。
🎜 매개변수 Replacement🎜🎜🎜🎜🎜Vue의 전환 시스템이 완전히 변경되었습니다. 이제 <transition> 및 <transition-group>을 사용하여 변경되었습니다. ;는 transition 속성을 사용하는 대신 전환 효과를 얻기 위해 요소를 래핑합니다. 자세한 내용은 전환 가이드를 참조하세요. 🎜
🎜🎜업그레이드 방법 🎜🎜🎜🎜 마이그레이션 도구를 실행하여 transition 속성을 찾으세요. 장소. 🎜🎜🎜🎜🎜
🎜재사용 가능한 전환Vue.transition교체 sup>🎜 🎜🎜🎜새로운 전환 시스템에서는 템플릿을 통해 전환 효과를 재사용할 수 있습니다. 🎜
🎜🎜업그레이드 방법 🎜🎜🎜🎜 마이그레이션 도구를 실행하여 transition 속성을 찾으세요. 장소. 🎜🎜🎜🎜🎜
🎜전환 stagger 매개변수 제거됨🎜 🎜🎜 🎜목록 렌더링에서 점진적인 전환을 사용하려면 요소의 data-index(또는 유사한 속성)를 설정하여 타이밍을 제어할 수 있습니다. 이 예를 참조하세요. 🎜
🎜🎜업그레이드 방법 🎜🎜🎜🎜 마이그레이션 도구를 실행하여 transition 속성을 찾으세요. 장소. 업그레이드 중에 새로운 전환 전략으로 "전환"할 수 있습니다. 🎜🎜
$dispatch 및 $broadcast 이미 더 이상 사용되지 않습니다. Vuex와 같은 보다 간결하고 명확한 구성 요소 간 통신과 더 나은 상태 관리 솔루션을 사용하세요.
🎜컴포넌트 트리 구조 기반의 이벤트 흐름 방식은 정말 이해하기 어렵고, 컴포넌트 구조가 확장될수록 점점 더 취약해지기 때문입니다. 이 이벤트 방식은 정말 좋지 않으며, 앞으로도 개발자들에게 너무 많은 고통을 끼치고 싶지 않습니다. 그리고 $dispatch 및 $broadcast는 형제 구성 요소 간의 통신 문제를 해결하지 못합니다. 🎜🎜$dispatch 및 $broadcast를 업그레이드하는 가장 간단한 방법은 이벤트 센터를 사용하여 구성 요소 트리의 어떤 레이어에 관계없이 구성 요소가 자유롭게 통신할 수 있도록 하는 것입니다. Vue 인스턴스는 이벤트 전달 인터페이스를 구현하므로 빈 Vue 인스턴스를 인스턴스화하여 이를 달성할 수 있습니다. 🎜🎜이 방법의 가장 일반적인 용도 중 하나는 상위-하위 구성 요소가 서로 통신하는 것입니다. 이러한 경우 v-on를 사용하여 자녀의 말을 들을 수 있습니다. $emit의 구성 요소 변경 사항입니다. 이를 통해 이벤트 가시성을 쉽게 추가할 수 있습니다. 🎜🎜그러나 $emit는 여러 계층의 상위-하위 구성 요소 간에 통신하는 경우에는 쓸모가 없습니다. 이와 대조적으로 중앙 집중식 이벤트 미들웨어를 사용하면 간단한 업그레이드가 가능합니다. 이렇게 하면 구성 요소가 형제인 경우에도 구성 요소 간의 통신이 매우 원활해집니다. Vue는 이벤트 이미터 인터페이스를 통해 인스턴스를 실행하므로 실제로는 빈 Vue 인스턴스를 사용할 수 있습니다. 🎜🎜예를 들어 다음과 같은 todo 애플리케이션 구조가 있다고 가정해 보겠습니다. 🎜
🎜간단한 경우에는 $dispatch 및 $broadcast이지만 대부분의 복잡한 상황에서는 Vuex. 🎜
🎜 업그레이드 방법🎜🎜이전 도구를 실행하여 업그레이드 방법을 알아보세요. <코드 인스턴스>$dispatch 및 $broadcast를 사용합니다. 🎜🎜
필터
삽입된 텍스트 외부의 필터제거됨
이제 필터는 삽입된 텍스트 내부에서만 사용할 수 있습니다(<코드>{{ }} 태그). 지시어(예: v-model, v-on 등))에 필터를 사용하면 상황이 더 복잡해진다는 사실을 발견했습니다. v-for와 같은 목록 필터의 경우 처리 논리를 템플릿 전체에서 재사용할 수 있도록 js에 계산된 속성으로 넣는 것이 가장 좋습니다. {{ }} tags)。我们发现在指令 (如:v-model,v-on等) 中使用过滤器使事情变得更复杂。像 v-for 这样的列表过滤器最好把处理逻辑作为一个计算属性放在 js 里面,这样就可以在整个模板中复用。
而是在 computed 属性中使用 lodash’s orderBy (或者可能是 sortBy간단히 말하면, 네이티브 js에서 구현할 수 있는 것들은 같은 문제를 반복적으로 다루기 위해 새로운 심볼을 도입하는 것을 피하려고 노력합니다. Vue의 내장 필터를 교체하는 방법은 다음과 같습니다.
debounce 필터를 교체하세요. 더 이상 이와 같이 작성하지 마세요
rrreeerrreee
lodash의 디바운스(throttle)을 사용하여 사용량이 많은 작업을 직접 제어할 수 있습니다. 위 함수는 다음과 같이 구현할 수 있습니다. rrreeerrreee이 쓰기 방법의 더 많은 장점은 v-model 예를 참조하세요.
기본적으로는 잘 작동하지만 상태 업데이트가 지연되면 이상한 동작이 발생할 수 있습니다. 예를 들어 결과 태그를 클릭하고 입력 상자 중 하나에 9.999를 입력해 보세요. 입력 상자가 포커스를 잃으면 해당 값이 $10.00로 업데이트됩니다. 그런데 전체 계산기를 보면 저장된 데이터가 9.999인 것을 알 수 있습니다. 사용자가 보는 것은 더 이상 진정한 동기화가 아닙니다! 보다 강력한 Vue 2.0 솔루션으로 전환하려면 먼저 이 필터를 새로운 <currency-input> 구성 요소로 래핑해 보겠습니다.
이를 통해 독립적인 필터를 추가할 수 있습니다. 캡슐화할 수 없는 동작, 입력 상자의 포커스된 내용을 선택하는 등의 작업을 수행할 수 있습니다. 다음으로 필터에서 비즈니스 로직을 추출합니다. 다음으로 모든 것을 외부 currencyValidator 객체
This 더 모듈화되어 Vue 2로 마이그레이션하기가 더 쉬울 뿐만 아니라 환율 격차 및 형식도 허용됩니다.
Vue 코드에서 별도의 단위 테스트
다음과 같은 애플리케이션의 다른 부분에서 사용하세요. API 측 로드 유효성 검사 🎜🎜🎜🎜이 유효성 검사기를 추출한 후 더 강력한 솔루션으로 더욱 편안하게 구축할 수도 있습니다. 이러한 이상한 상태도 제거되어 브라우저의 기본 숫자 입력 상자처럼 사용자가 더 이상 오류를 입력할 가능성이 없습니다. 🎜🎜그러나 Vue 1.0 필터에서는 여전히 제한이 있으므로 Vue 2.0으로 완전히 업그레이드해 보겠습니다.
수명주기 후크와 DOM 이벤트를 사용하여 양방향 필터의 숨겨진 동작을 대체하여 입력 상자의 모든 측면이 더욱 명확해졌습니다.
이제 사용자 정의 입력 상자에서 직접 v-model을 사용할 수 있습니다. 이는 일반 입력 상자와 함께 사용될 뿐만 아니라 구성 요소가 Vuex 친화적임을 의미합니다. v-model,其不只是固定配合正常的输入框来使用,这也意味着我们的组件是对 Vuex 友好的。
🎜반환 값을 얻기 위해 더 이상 필터 옵션이 필요하지 않기 때문에 환율 작업은 실제로 비동기식으로 수행될 수 있습니다. 즉, 환율을 처리하는 애플리케이션이 많으면 이 논리를 쉽게 개선하여 공유 마이크로서비스로 만들 수 있습니다. 🎜🎜
🎜업그레이드 방법🎜🎜이전 도구v-model과 같은 지시문에서 필터를 사용하는 예를 찾아보세요. 이를 놓치면 명령줄 오류가 발생합니다. 🎜🎜🎜 🎜
슬롯
🎜 🎜
동일한 이름의 슬롯삭제 span> 🎜🎜동일 템플릿 <slot>의 중복된 이름은 더 이상 사용되지 않습니다. 슬롯이 렌더링되면 동일한 템플릿의 다른 곳에서 다시 렌더링할 수 없습니다. 동일한 콘텐츠를 다른 위치에 렌더링하려면 prop을 사용하여 전달할 수 있습니다. 🎜
🎜 업그레이드 방법🎜🎜업데이트 후 테스트를 실행하고 콘솔 경고 메시지에서 중복 이름이 지정된 슬롯 v-model에 대한 팁을 확인하세요. 🎜🎜🎜 🎜
슬롯 code> 스타일 매개변수 제거🎜🎜<slot> 코드 이름 지정 > 삽입된 조각은 더 이상 슬롯의 매개변수를 유지하지 않습니다. 스타일을 제어하려면 래핑 요소를 사용하세요. 또는 보다 고급 접근 방식을 취합니다. 프로그래밍 방식으로 콘텐츠를 수정합니다(렌더링 함수). 🎜
🎜 업그레이드 방법🎜🎜이전 도구를 실행하여 찾아 선택하세요. 슬롯 태그 CSS 선택기(예: [slot="my-slot-name"]) 🎜🎜
keep-alive는 더 이상 특수 속성이 아니라 <transition>와 유사한 래핑된 구성 요소입니다. 예:
rrreee
이는 <keep-alive> 상태가 여러 개인 하위 구성 요소에서 사용할 수 있습니다. rrreee<keep-alive> ;< /code> 다양한 하위 구성 요소가 포함된 경우 각 하위 구성 요소에 개별적으로 영향을 주어야 합니다. 첫 번째 구성요소뿐만 아니라 모든 하위 구성요소도 무시됩니다.
<transition>과 함께 사용하는 경우 콘텐츠를 래핑해야 합니다. 🎜rrreee🎜🎜🎜🎜업그레이드 방법🎜🎜🎜🎜실행 🎜마이그레이션 도구🎜 찾기 연결 유지 속성. 🎜🎜🎜🎜🎜
🎜🎜계산된 보간🎜🎜🎜🎜🎜🎜🎜
🎜 속성 내 계산된 보간 제거됨 🎜🎜🎜🎜🎜 속성 내 계산된 보간은 더 이상 사용할 수 없습니다. 🎜rrreee🎜는 인라인 표현식: 🎜rrreee🎜 또는 계산된 속성: 🎜rrreeerrreee🎜으로 작성해야 합니다. 🎜 🎜🎜업그레이드 방법🎜🎜🎜🎜🎜마이그레이션 도구🎜를 실행하여 속성 내에서 계산된 보간을 찾습니다🎜🎜🎜🎜🎜
🎜🎜vm.$watch🎜🎜🎜🎜 🎜changed🎜🎜🎜🎜🎜vm.$watch를 통해 생성된 Observer는 이제 구성 요소가 렌더링될 때 활성화됩니다. 이를 통해 불필요한 업데이트 없이 구성 요소가 렌더링되기 전에 상태를 업데이트할 수 있습니다. 예를 들어 구성 요소 소품의 변경 사항을 관찰하여 구성 요소 자체의 값을 업데이트할 수 있습니다. 🎜🎜이전에 vm.$watch를 통해 구성 요소 업데이트 후 DOM과 상호작용했다면 이제 업데이트된 수명 주기 후크를 통해 이 작업을 수행할 수 있습니다. 🎜🎜🎜🎜🎜업그레이드 방법🎜🎜🎜🎜테스트 실행, 이전 방법에 의존하는 관찰자가 있으면 실패한 테스트가 나타납니다. 🎜🎜🎜🎜🎜
🎜🎜실행 마이그레이션 도구는 어레이에서 .$set를 찾습니다. 누락된 내용이 있는 경우 🎜콘솔 오류 메시지🎜를 참고하세요. 🎜🎜🎜🎜🎜
🎜🎜Array.prototype.$remove🎜🎜🎜🎜 🎜Remove🎜🎜🎜🎜🎜 with Array . 프로토타입.splice 대안, 예: 🎜rrreee🎜 또는 더 나은 방법은 제거된 메소드에 인덱스 매개변수를 직접 제공하는 것입니다: 🎜rrreee
🎜🎜업그레이드 방법🎜🎜🎜🎜Run마이그레이션 도구가 어레이에서 .$remove를 찾았습니다. 누락된 내용이 있는 경우 🎜콘솔 오류 메시지🎜를 참고하세요. 🎜🎜🎜🎜🎜
🎜🎜Vue.set 및 Vue.delete🎜Remove🎜🎜🎜 Vue 인스턴스 🎜 🎜Vue.set 및 Vue.delete는 더 이상 인스턴스에서 작동하지 않습니다. 이제 인스턴스의 데이터 옵션에서 모든 최상위 응답 값을 선언하는 것이 필수입니다. 인스턴스 $data에서 인스턴스 속성이나 값을 삭제하는 경우 null로 설정하면 됩니다. 🎜
🎜🎜업그레이드 방법 🎜🎜🎜🎜 마이그레이션 도구를 실행하여 인스턴스 코드> 또는 Vue.delete . 누락된 내용이 있는 경우 🎜콘솔 오류 메시지🎜를 참고하세요. 🎜🎜🎜🎜🎜
🎜🎜vm.$data 교체 🎜removal🎜🎜🎜🎜🎜인스턴스의 $data 교체가 이제 금지됩니다. 이는 일부 극단적인 경우로부터 응답 시스템을 방지하고 구성 요소 상태를 보다 쉽게 제어하고 예측할 수 있게 만듭니다(특히 유형 검사 기능이 있는 시스템의 경우). 🎜
🎜🎜업그레이드 방법 🎜🎜🎜🎜 마이그레이션 도구를 실행하여 vm.$data< 적용 범위를 찾으세요. /코드 > 위치. 누락된 내용이 있다면 🎜콘솔 경고 메시지🎜를 참고해주세요. 🎜🎜
🎜🎜업그레이드 방법 🎜🎜🎜마이그레이션 도구를 실행하여 vm.$get을 찾으세요. < /code> 위치. 누락된 내용이 있는 경우 🎜콘솔 오류 메시지🎜를 참고하세요. 🎜🎜🎜🎜🎜
🎜DOM 주변의 인스턴스 메서드🎜
🎜🎜🎜 < p id="vm-$appendTo">🎜vm.$appendTo🎜🎜 제거🎜🎜🎜🎜DOM 기본 방법 사용: 🎜rrreee
🎜🎜업그레이드 방법🎜🎜🎜마이그레이션 도구는 vm.$appendTo의 위치를 찾습니다. 누락된 내용이 있는 경우 🎜콘솔 오류 메시지🎜를 참고하세요. 🎜🎜🎜🎜🎜
🎜vm.$before🎜🎜 제거🎜🎜🎜DOM 기본 방법 사용: 🎜rrreee
🎜🎜업그레이드 방법🎜🎜🎜실행 마이그레이션 도구가 vm.$before를 찾았습니다. 누락된 것이 있으면 🎜콘솔 오류 메시지🎜를 참조하세요. 🎜🎜🎜🎜🎜
🎜vm.$after🎜🎜 제거🎜🎜🎜DOM 기본 방법 사용: 🎜rrreee🎜myElement가 마지막 노드인 경우 다음과 같이 작성할 수도 있습니다. 🎜rrreee< div 스타일 ="margin-top: 2em;padding: 2em; background: rgba(73,195,140,0.1);border-radius: 2px;">🎜🎜업그레이드 방법🎜< /span >🎜🎜마이그레이션 도구를 실행하여 vm.$after를 찾으세요. 코드> 위치. 누락된 것이 있으면 🎜콘솔 오류 메시지🎜를 참조하세요. 🎜🎜
부분이 제거되고 구성 요소(props) 간의 보다 명확한 데이터 흐름으로 대체되었습니다. 부분적으로 성능이 중요한 영역을 사용하지 않는 한 대신 일반 구성요소 를 사용하는 것이 좋습니다. name 부분을 동적으로 바인딩하는 경우 동적 구성 요소.
애플리케이션의 성능이 중요한 부분에서 부분 부분을 사용하는 경우 로 업그레이드해야 합니다. 기능적 구성요소. 이는 순수 JS/JSX 파일(.vue 파일이 아님)에 있어야 하며 부분과 마찬가지로 상태 비저장 및 인스턴스가 없어야 합니다. 이로 인해 렌더링 속도가 매우 빨라집니다.
부분 요소에 비해 기능적 구성 요소의 한 가지 이점은 JavaScript의 모든 기능에 액세스할 수 있기 때문에 더 동적으로 만들 수 있다는 것입니다. 그러나 여기에는 비용이 듭니다. 렌더링된 구성 요소 프레임워크를 사용해 본 적이 없다면 이를 배우는 데 시간이 더 오래 걸릴 수 있습니다.
업그레이드 방법🎜🎜마이그레이션 도구를 실행하여 < 코드 >Vue.partial 인스턴스🎜🎜🎜🎜🎜🎜 🎜