이번에는 Vue에 대한 일반적인 인터뷰 질문을 공유하여 기본 지식을 정리하고 Vue 지식 보유량을 높이는 데 도움을 드릴 것입니다. 와서 살펴보세요!
제가 공유하는 내용은 몇 가지 일반적인 Vue 면접 질문이지만 이것이 전부를 대표하는 것은 아닙니다. 기사에 잘못된 부분이 있으면 지적해 주세요. 궁금한 점이 있거나 다른 인터뷰 질문이 있으면 댓글란에 메시지를 남겨서 함께 논의해 보세요.
부모-자식 구성 요소 통신: props
和 event
, v-
model
, .sync
、 ref
、 $parent
.sync$children
, ref,
. (학습 영상 공유: $attr
和 $listeners
vue 영상 튜토리얼provide
和 inject
、eventbus
、通过根实例$root
访问、vuex
、dispatch
) brodcast
vue 2.0v-model
v-bind
和 v-on
v-model
,默认会为组件绑定名为 value
prop
和名为 input
부모-자식이 아닌 구성 요소 통신:
,
v-model
provide 및
injectupdate:modelValue
,
및 brodcast
2. v-model은 양방향 바인딩을 어떻게 구현하나요?
v-model을 사용하면 기본적으로 value
라는 구성 요소가 바인딩됩니다.prop
및input이라는 이벤트.
update:modelValue event
Vuex와 전역 객체 사이에는 두 가지 주요 차이점이 있습니다.
Vuex의 상태 저장소는 반응형입니다. Vue 구성 요소가 저장소에서 상태를 읽을 때 저장소가 상태 그러면 해당 구성 요소가 그에 따라 효율적으로 업데이트됩니다.v-if
4. Vue의 컴포넌트 및 하위 컴포넌트 라이프사이클 후크의 실행 순서는 무엇입니까?
⽗컴포넌트 마운팅은 모든 하위 컴포넌트가 마운트된 후에만 완료되어야 합니다.
마운트가 완료되었으므로 하위 구성요소를 마운트한 후 v-show
beforeCreate ->created -> ◗beforeMount ->
하위 생성 ->
⽗마운트
업데이트됨
v-if
切换的开销更⼤,⽽ v-show
⽗구성요소 업데이트 프로세스: v-show
v-if
는 ⽗ 구성요소에 영향을 미칩니다. ⽗beforeUpdate -> ⼦updated -> ⽗
업데이트됨
파기 프로세스: ⽗beforeDestroy -> Destroyed ◗destroyed
사실 이해하기만 하면 상황이 어떻든 자식 컴포넌트가 완료되기를 기다리는 부모 컴포넌트여야 합니다. 완료된 후에만 해당 완료된 후크가 실행되므로 기억하기 쉽습니다🎜🎜🎜5. v-show와 v-if의 차이점은 무엇인가요? 🎜🎜🎜🎜🎜🎜v-if🎜는 전환 프로세스 중에 이벤트 리스너와 조건부 블록의 하위 구성 요소를 🎜파괴하고 다시 빌드🎜합니다. 초기 조건이 false인 경우 처음으로 조건이 충족될 때까지 아무 작업도 수행되지 않습니다. true인 경우 렌더링 시작 염색 모듈. 🎜🎜🎜🎜🎜v-show🎜는 초기 조건에 관계없이 단지 🎜CSS 기반 전환🎜일 뿐입니다. 모든 것이 렌더링됩니다. 🎜🎜🎜🎜그래서 🎜v-if🎜 전환 오버헤드가 더 크고, ⽽ 🎜v-show🎜 초기 렌더링 오버헤드가 더 큽니다. ⼼, 🎜는 자주 전환해야 하거나 전환하는 DOM 부분이 매우 복잡할 때 🎜v-show🎜를 사용하는 것이 더 적합합니다. 적합한. 렌더링 후 전환이 거의 없다면 🎜v-if🎜를 사용하는 것이 더 적합합니다. 🎜🎜🎜🎜6. Vue의 v-html은 어떤 문제를 일으키나요? 🎜🎜🎜웹사이트에서 임의의 HTML을 동적 렌더링하면 쉽게 XSS 공격이 발생할 수 있습니다🎜. 그러니 믿을 수 있는 범위 내에서만 가능합니다 콘텐츠에는 v-html을 사용하고 사용자가 제출한 콘텐츠에는 절대 사용해서는 안 됩니다. 🎜key
是给每个 vnode
指定的唯⼀ id
동시에
레벨 vnode
diff 过程中,可以根据 key
빠른 비교를 통해 여부를 판단할 수 있습니다.
동일한 노드이며 key
的唯⼀性可以⽣成 map
를 사용하면 더 빨라집니다.
해당 노드를 가져옵니다.
key
을 추가로 지정한 후에는 "내부 재사용" 전략이 더 이상 사용되지 않으므로 렌더링의 정확성을 보장할 수 있습니다.
.
v-for
和 v-if
가 같은 노드에 있을 때 v-
for
⽐ v-if
更⾼,这意味着 v-if
v-ifv-for
의 우선순위가 업데이트되었습니다. 이는 computed
v-for#
해시 값이 변경되어도 브라우저가 서버에 요청을 보내지 않으며 브라우저가 요청을 보내지 않습니다.
요청하면 페이지가 새로 고쳐지지 않습니다. 동시에 hashchange 이벤트를 청취하면 해시에서 어떤 변경이 발생했는지 알 수 있으며 이를 기반으로
페이지 콘텐츠의 일부를 업데이트하는 작업을 구현하기 위해 해시 변경 사항을 적용합니다. pushState
replaceState
Model-View-ViewModel
缩写,也就是把 MVC
Controller
演变成 ViewModel
모든 구성 요소 인스턴스가 데이터 복사본을 공유합니다. 따라서 어떤 구성 요소 인스턴스 데이터가 수정되더라도 모든 구성 요소 인스턴스에 영향을 미칩니다.
컴포넌트의 데이터는 함수로 작성되고,데이터는 함수 반환 값의 형태로 정의되므로computed
和 data
각 컴플렉스는
구성 요소를 한 번 사용하면 새 데이터 복사본이 반환됩니다. 이는 각 구성 요소 인스턴스에 대해 Observer
遍历 data
개인 데이터 공간get/set
数据拦截
2、初始化 computed
会调⽤ initComputed
函数
注册⼀个 watcher
实例,并在内实例化⼀个 Dep
을 생성하여 각 구성 요소 인스턴스가 자체 데이터를 유지할 수 있도록 하는 것과 유사합니다. 간단히 객체 형식으로 작성하면 모든 구성 요소 인스턴스에 공통됩니다.
데이터의 한 조각을 알면 모든 것을 바꾸는 결과가 나옵니다. watcher
watcher
)
调⽤计算属性时会触发其 Object.defineProperty
get
자신의 메시지 구독자에게 watcher.depend()
호출할 수 없습니다.
watcher
의 dep
의 subs
dep
的 subs
中添加其他属性的watcher
调⽤ watcher
的 evaluate
watcher
的 get
⽅法)让⾃身成为其他watcher
的消息订阅器的订阅者,⾸先将 watcher
赋给 Dep.target
getter
data
、 props
或其他 computed
call⽤evaluatewatcher
에 다른 속성을 추가하세요. > /code> 메소드(호출
get
访问器函数从⽽将该计算属性的 watcher
添加到求值函数中属性的watcher
的消息订阅器 dep
그럼
Dep.target
赋为 null
평가 함수를 실행한 후 평가 함수 내부의 속성에 접근할 때(예: Tathagata
set
dep
的 notify
wathcer
的 subs
3. 특정 속성이 변경되면 watcher
的 update
차단 기능을 트리거한 다음 자체 메시지 구독자를 호출합니다.
15. Vue의 반응 원리
이 질문을 받았는데 설명이 명확하지 않은 경우 Vue 공식 문서에서 직접 그림을 그려서 볼 수 있습니다. 설명이 더 좋을 것 같습니다.
Object.defineProperty
对数据进⾏劫持,并结合观察者模式实现。Object.defineProperty
创建⼀个 observe
getter
和 setter
。watcher
getter
收集为依赖。之后当依赖项的 setter
Vue의 반응성은 watcher
,从⽽使它关联的组件重新渲染。Object.defineProperty
只能劫持对象的属性,⽽ Proxy
데이터를 하이재킹하고 이를 관찰자 모드Object.defineProperty
와 결합하여 달성됩니다.
관찰
을 생성합니다.
모든 속성을 가로채서 및 setter
로 변환합니다. Object.defineProperty
Observe
, 由于Object.defineProperty
Vue의 각 구성 요소 인스턴스는 구성 요소 렌더링 중에 표시되는 watcher
인스턴스에 해당합니다.
그 과정에서 사용된
데이터 속성은 Object.defineProperty
를 통해 종속성으로 수집됩니다. 그런 다음 종속성의 setter
가 실행되면
, watcher
에 알림이 전송되어 관련 구성 요소가 다시 렌더링됩니다. data
中的数组或对象新增属性时,需要使⽤ vm.$set
Proxy
은 defineProperty
objects의 속성만 하이재킹할 수 있습니다. ⽽ 이기 때문입니다.
Proxy
,但 getter
和 setter
속성만 하이재킹할 수 있으며, 객체의 각 속성을 순회해야 합니다. 그리고
프록시는 객체를 직접 프록시할 수 있습니다.
Proxy
兼容性差 ⽬前并没有⼀个完整⽀持 Proxy
새 속성을 수동으로 추가해야 함
관찰
,
⽀13가지 유형의 차단Observer
작업을 지원합니다.
__proto__
없는 것. push
unshift
, splice
새로운 표준 성능 보너스 프록시 새로운 표준으로 JS 엔진은 장기적으로 계속해서 최적화될 것입니다.
setter
는 기본적으로 더 이상 대상이 아닙니다.
성적 최적화.
nextTick
마이크로 태스크 구현을 위해 먼저 지원 여부를 확인하겠습니다.
Promise
. 지원되지 않는 경우, 매크로 태스크 구현을 먼저 확인합니다.
지원되는지 테스트하세요 setImmediate
(IE 및 Etage 상위 버전에서 지원됨) 지원되지 않는 경우 지원되는지 확인하세요.
MessageChannel이 지원되지 않으면 결국 setTimeout
0으로 다운그레이드됩니다. v-on
)을 강제로 사용하게 됩니다. v-on
)。注意:之所以将 nextTick
nextTick
nextTcik
2단계: 구문 트리 최적화
Vue 템플릿의 모든 데이터가 반응하는 것은 아닙니다. 첫 번째 렌더링 이후에는 절대 변경되지 않는 많은 데이터가 있습니다. 데이터의 이 부분에 의해 생성된 DOM은 변경되지 않으며 패치 프로세스 중에 비교를 건너뛸 수 있습니다. 이 단계에서 생성된 AST 트리는 각 하위 트리가 정적 노드인지 여부를 감지하기 위해 심층적으로 탐색됩니다. 생성된 DOM은 변경할 필요가 없으므로 런타임 시 템플릿 업데이트가 크게 최적화됩니다.const code = generate(ast, options)
Proxy
Vue3.x가 Object.defineProperty를 대체하도록변경되었습니다. Proxy는 직접 모니터링할 수 있기 때문에 객체와 배열에 변화가 있고, 가로채기 방법도 무려 13가지나 된다. 그리고 새로운 표준으로서 브라우저 제조업체의 지속적인 성능 최적화가 적용됩니다. 변화.
Proxy는 객체의 첫 번째 레이어만 프록시합니다. 그러면 Vue3는 이 문제를 어떻게 처리합니까?Reflect.get의 현재 반환 값이 Object인지 확인합니다. 그렇다면 반응형 메서드를 프록시로 사용하세요. 이런 식으로 깊은 관찰이 이루어집니다.
21. Vue에 대해 어떤 성능 최적화를 수행했나요? ⽤v - 각 요소에 이벤트를 바인딩할 때 이벤트 프록시를 사용합니다
서버 측 렌더링 SSR
Tree Shaking/Scope Hoisting으로 ⽤cdn이 세 번째⽅모듈을 로드
PWA
캐시(클라이언트 캐시, 서버 캐시) 최적화, 서버에서 gzip 압축 활성화 등을 사용할 수도 있습니다.위 내용은 [편집 및 공유] Vue 고빈도 면접 질문 몇 가지의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!