이 기사는 37가지 일반적인 Vue 인터뷰 질문을 요약하고 공유하여 기초를 강화하고 Vue 지식 보유량을 향상시키는 데 도움이 됩니다. 그냥 외우면 끝입니다!
관련 추천: 2022 빅 프런트엔드 면접 질문 요약(모음)
1. MVVM에 대한 이해에 대해 이야기해 주세요.
단순화된 매핑 관계, 숨겨진 컨트롤러
MVC를 기반으로 MVVM은 제어 계층을 숨깁니다.
Vue는 MVVM 프레임워크가 아니라 뷰 레이어 프레임워크입니다. [관련 추천: vue.js 동영상 튜토리얼]
ViewModal은 데이터와 뷰를 연결하는 브릿지입니다.
2. Vue의 반응형 데이터에 대한 이해에 대해 이야기해 주세요.
배열과 객체 유형의 값이 변경되면 defineReactive
方法,借助了defineProperty
,将所有的属性添加了getter
和setter
를 전달하세요. 사용자는 값을 얻고 설정할 때 일부 작업을 수행할 수 있습니다.
결함: 가장 바깥쪽 속성만 모니터링할 수 있습니다. 다중 계층인 경우 전체 재귀가 필요합니다.
Get은 종속성 수집을 수행합니다(dep[watcher, watcher]).
데이터 업데이트는 세트에서 수행됩니다(업데이트 알림, 관찰자에게 알림)
3. Vue에서 배열의 변경 사항을 감지하는 방법은 무엇입니까?
Vue는 배열에 대한 속성을 정의하지 않지만 배열의 7가지 메서드를 다시 작성합니다.
- push
- shift
- pop
- splice
- unshift
- sort
- reverse
이 방법은 배열 자체를 변경하기 때문입니다.
배열의 인덱스와 길이는 모니터링할 수 없습니다.
4. Vue에서 종속성을 수집하는 방법은 무엇입니까?
Vue가 초기화되면 마운트 후 컴파일됩니다. renderFunction을 생성합니다.
값을 획득하면 Watcher를 수집하여 Dep에 배치합니다.
사용자가 값을 변경하면 관찰자에게 뷰를 업데이트하라는 알림이 전송됩니다.
5. Vue의 템플릿 컴파일 원리를 어떻게 이해하나요?
이 문제의 핵심은 템플릿을 렌더링 기능으로 변환하는 방법입니다.
- 템플릿 모듈을 ast 문법 책으로 변환 - parserHTML
- 정적 문법 표시(일부 노드는 변경되지 않음)
- 코드 재생성 - codeGen, with 구문을 사용하여 문자열 래핑
6. Vue life 사이클 후크 어떻게 구현되나요?
Vue의 라이프 사이클 후크는 콜백 함수이며, 컴포넌트 인스턴스 생성 시 해당 후크 메서드가 호출됩니다.
Hook은 내부적으로 처리되며 Hook 기능은 배열 형태로 유지됩니다.
7. Vue 구성요소의 수명주기는 어떻게 되나요?
- beforeCreate는 인스턴스 초기화 후, 데이터 관찰 관찰자와 이벤트 및 관찰자 이벤트 구성 전
- 생성됩니다. 이 단계에서 다음 구성이 완료됩니다.
- 데이터 관찰
- 속성 작업. 및 메소드
- 감시/이벤트 시간 콜백
- $el이 아직 생성되지 않았습니다
- beforeMount가 마운트 전에 호출되고 렌더가 아직 호출되지 않았습니다
- mounted el이 새로 생성된 vm.$el로 대체됩니다.
beforeUpdate는 데이터가 업데이트될 때 호출되며, 가상 Dom이 다시 렌더링되고 패치되기 전에 발생합니다. - update는 데이터 변경으로 인해 가상 Dom이 다시 렌더링되고 패치된 후에 호출됩니다.
- beforeDestroy는 인스턴스가 파괴되기 전에 호출됩니다.
- 파괴된 인스턴스 호출 후에는 Vue 인스턴스의 모든 것이 바인딩 해제되고 모든 이벤트 리스너가 제거됩니다. 서버 측 렌더링 중에는 후크가 호출되지 않습니다
- keep-alive (활성화 및 비활성화)
-
8. vue.mixin의 사용 시나리오 및 원리?
Vue의 믹스인 기능은 공개 비즈니스 로직을 추상화하는 것입니다. 구성 요소가 초기화되면 mergeOptions 메서드가 호출되어 다양한 속성에 대해 스키마가 병합됩니다.
혼합 데이터가 자체 구성 요소의 데이터와 충돌하는 경우 자체 데이터가 우선합니다.
단점: 이름 충돌, 불분명한 데이터 소스
9. Vue의 구성 요소 데이터는 왜 함수여야 합니까?
싱글톤 모드이므로 병합 작업이 없으므로 루트 인스턴스는 병합 작업이 필요하지 않습니다. 데이터가 함수인지 확인하십시오.
컴포넌트의 데이터는 두 컴포넌트의 데이터가 오염되는 것을 방지하는 기능이어야 합니다.
모두 개체인 경우 병합 시 동일한 주소를 가리킵니다.
그리고 함수인 경우 병합 시 호출하면 공백이 2개 생성됩니다. new Vue
10.nextTick의 원리를 설명해 주세요.
nextTick은 마이크로태스크입니다.
- nextTick의 콜백은 다음 Dom 업데이트 주기가 끝난 후 실행되는 지연된 콜백입니다.
- 업데이트된 Dom을 얻는 데 사용할 수 있습니다.
- nextTick을 사용하면 사용자 정의 논리를 보장할 수 있습니다. 업데이트 후 업데이트됩니다.
11. 계산과 감시의 차이점은 무엇인가요?
- Computed와 Watch 모두 Watcher를 기반으로 구현됩니다.
- 계산된 속성은 캐시되며 종속 값은 변경되지 않습니다. 값을 가져올 때 계산된 속성 메서드는 반복적으로 실행되지 않습니다.
- watch는 값이 변경되면 콜백 함수가 호출됩니다.
12. Vue.set 메소드는 어떻게 구현되나요?
- vue는 객체와 배열 자체 모두에 dep 속성을 추가합니다.
- 존재하지 않는 속성을 객체에 추가하면 객체가 의존하는 감시자가 업데이트되도록 트리거됩니다.
- 배열 인덱스가 수정되면, 배열 자체를 배열 업데이트를 위한 splice 메소드라고 합니다
13. Vue가 가상 Dom을 사용하는 이유는 무엇입니까? 가상 Dom은 성능이 낮기 때문에 실제 Dom을 추상화한 js 객체를 사용합니다. Dom을 직접 조작하지만, js 레이어에서는 Dom 연산을 객체 연산으로 변환할 수 있어 연산 효율성이 높습니다. 마지막으로 차이점은 diff 알고리즘을 통해 업데이트되어 Dom을 업데이트합니다
가상 Dom은 실제 플랫폼 환경에 의존하지 않으며 크로스 플랫폼이 가능합니다-
- 14. Vue의 diff 알고리즘의 원리는 무엇인가요?
- Vue의 diff 알고리즘은 평면 비교이며 교차 수준 비교를 고려하지 않습니다. 내부적으로는 deep recursion + double 포인터 방식을 사용하여 비교
먼저 두 노드가 같은 노드인지 비교
같은 노드의 속성을 비교하고 기존 노드를 재사용
먼저 아들 노드를 비교하고 이전 노드와 새 노드의 아들 - 최적화 비교: 일대일, 일대일, 일대일, 일대일
- 비교 검색 및 재사용
-
- 15. Vue는 데이터 하이재킹을 통해 데이터 변경 사항을 정확하게 감지할 수 있는데, 차이점을 감지하기 위해 왜 diff를 수행해야 합니까?
- 반응형 데이터 변경, Vue는 데이터가 언제 변경되는지 실제로 알 수 있으며 반응형 시스템은 즉시 알 수 있습니다. 하지만 각 속성에 Watcher를 추가하면 성능이 매우 저하됩니다.
너무 세분화하면 부정확한 업데이트가 발생합니다.
- 그래서 watcher + Diff 알고리즘을 사용하여 차이점을 감지합니다.
- 16. 키의 기능과 원리를 설명해 주세요
Vue의 패치 과정에서 키를 사용하여 두 가상 노드가 동일한 노드인지 확인할 수 있습니다.
키가 없으면 업데이트 중에 문제가 발생합니다
인덱스를 키로 사용하지 마세요-
-
- 세븐틴. 컴포넌트에 대한 이해에 대해 이야기해 보세요
컴포넌트 기반 개발은 애플리케이션 개발 효율성과 테스트 가능성을 크게 향상시킬 수 있습니다.
자주 사용되는 컴포넌트화 기술: 속성, 커스텀 이벤트, 슬롯
업데이트 범위 축소, 변경된 컴포넌트 다시 렌더링- 높은 응집력, 낮은 결합도, 단방향 데이터 흐름
-
- 18, 컴포넌트 렌더링 프로세스에 대해 설명해주세요
- 컴포넌트의 가상 노드 생성->컴포넌트의 실제 노드 생성->페이지에 삽입
19.컴포넌트의 업데이트 프로세스를 설명해주세요.
속성 업데이트는 patchVnode 메소드를 트리거합니다. 가상 노드는 사전 패치 후크를 호출한 다음 속성을 업데이트하고 구성 요소를 업데이트합니다.
20. 비동기식 구성 요소의 원리
먼저 비동기 자리 표시자 노드를 렌더링합니다. -> 구성 요소가 로드된 후 forceUpdate를 호출하여 강제로 업데이트합니다.
21. 기능적 구성 요소의 장점과 원리
기능적 구성 요소의 특성: 상태 비저장, 수명 주기 없음, 없음. 그러면 성능이 조금 더 높아질 것입니다.
일반 컴포넌트는 Vue를 상속받은 클래스입니다.
- 기능적 구성 요소는 일반적인 기능입니다.
22. 컴포넌트에 값을 전달하는 방법은 무엇인가요?
- props 및 emit:을 통해 상위 구성 요소에 데이터를 전달합니다. ParentGrouppieces number데이터를subgrouppiece로 보내고, pass through ppassdeliver . ㅋㅋㅋ 합격 합격이벤트 방출 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ par ent,children은 현재 구성 요소의 상위 구성 요소와 현재 구성 요소의 하위 구성 요소를 가져옵니다at
t - rs s및 청취자 여러분. 상위 구성 요소는 제공을 통해 제공되고 하위 구성 요소는 주입을 통해 변수를 주입합니다$ref가 인스턴스를 가져옵니다eventBus 수평 구성 요소 데이터 전송Vuex23.$attrs는 어떤 문제를 해결하는 것으로 보입니까? 주요 기능은 데이터를 일괄 전송하는 것입니다. provide/inject는 주로 크로스 레벨 데이터 전송을 달성하기 위해 플러그인에 적용하는 데 더 적합합니다.
스물넷, v-for와 v-if 중 어느 것이 더 우선순위가 높나요? - 우선, v-for와 v-if는 같은 태그에 사용할 수 없습니다. v-for를 먼저 처리한 다음 v-if를 처리하세요.