v-if와 v-for의 차이점: 1. 다른 기능 v-if 명령은 조건부로 내용을 렌더링하는 데 사용됩니다. 이 내용은 명령의 표현식이 true를 반환하는 경우에만 렌더링됩니다. value; while v -for 지시문은 배열을 기반으로 목록을 렌더링합니다. 2. 우선순위가 다릅니다. v-if보다 우선순위가 높습니다. if 판단 시 v-for가 v-if보다 먼저 판단됩니다.
이 튜토리얼의 운영 환경: windows7 시스템, vue3 버전, DELL G3 컴퓨터.
우선 공식 문서에는 v-for와 v-if를 함께 사용하는 것을 권장하지 않는다고 명시되어 있습니다.
1. v-if 및 v-for의 역할
v-if 명령어 는 콘텐츠를 조건부로 렌더링하는 데 사용됩니다 . 이 콘텐츠는 명령 표현식이 참값을 반환할 때만 렌더링됩니다.
v-for 지시문은 an 배열을 기반으로 목록 을 렌더링합니다. v-for 지시문에는 item in items
형식의 특수 구문이 필요합니다. 여기서 항목은 소스 데이터 배열 또는 개체이고 항목은 반복되는 배열 요소의 별칭입니다.
v-for에서는 키 값을 설정하고 각 키 값이 고유한지 확인하는 것이 좋습니다. 그러면 diff 알고리즘 최적화가 용이해집니다.
둘의 사용법 차이는 다음과 같습니다.
<div v-if="isShow" >123</div> <li v-for="item in items" :key="item.id"> {{ item.label }} </li>
2. 둘의 우선순위
사용시 v-for가 v-if
v-if보다 우선순위가 높습니다. 그리고 v- for는 vue 템플릿 시스템의 모든 명령어입니다
vue 템플릿이 컴파일되면 명령어 시스템을 실행 가능한 렌더링 함수로 변환합니다
예
p 태그를 작성하고 v-if 및 v-for를 사용합니다
<div id="app"> <p v-if="isShow" v-for="item in items"> {{ item.title }} </p> </div>
vue 인스턴스를 생성하고 isShow 및 항목 데이터를 저장합니다
const app = new Vue({ el: "#app", data() { return { items: [ { title: "foo" }, { title: "baz" }] } }, computed: { isShow() { return this.items && this.items.length > 0 } } })
템플릿 명령의 코드는 렌더링 함수에서 생성됩니다. 렌더링 함수는 app.$options.render
ƒ anonymous() { with (this) { return _c('div', { attrs: { "id": "app" } }, _l((items), function (item) { return (isShow) ? _c('p', [_v("\n" + _s(item.title) + "\n")]) : _e() }), 0) } }
_l을 통해 얻을 수 있습니다. vue의 함수, 함수 내부에서 if 판단이 수행되고
예비 결론이 도출됩니다. v-for가 v-if보다 우선순위가 높습니다
그런 다음 v-for와 v-if는 서로 다른 레이블에 배치됩니다
<div id="app"> <template v-if="isShow"> <p v-for="item in items">{{item.title}}</p> </template> </div>
그런 다음 렌더링 함수를 출력합니다
ƒ anonymous() { with(this){return _c('div',{attrs:{"id":"app"}}, [(isShow)?[_v("\n"), _l((items),function(item){return _c('p',[_v(_s(item.title))])})]:_e()],2)} }
이때 v-for와 v-if가 서로 다른 태그에 작용할 때 먼저 판단한 다음 목록에 렌더링하는 것을 볼 수 있습니다
vue 소스 코드를 확인하겠습니다
소스 코드 위치 : vue-devsrccompilercodegenindex.js
export function genElement (el: ASTElement, state: CodegenState): string { if (el.parent) { el.pre = el.pre || el.parent.pre } if (el.staticRoot && !el.staticProcessed) { return genStatic(el, state) } else if (el.once && !el.onceProcessed) { return genOnce(el, state) } else if (el.for && !el.forProcessed) { return genFor(el, state) } else if (el.if && !el.ifProcessed) { return genIf(el, state) } else if (el.tag === 'template' && !el.slotTarget && !state.pre) { return genChildren(el, state) || 'void 0' } else if (el.tag === 'slot') { return genSlot(el, state) } else { // component or element ... }
In if 판단을 할 때 v-for가 v-if보다 먼저 판단됩니다. 최종 판단 결과는 v-if 및 v-보다 우선순위가 높습니다. for는 동일한 요소에 동시에 사용되어 성능 낭비가 발생합니다(각 렌더링이 먼저 루프된 후 조건부 판단을 수행함)
이 상황을 피하려면 템플릿(페이지)을 외부 레이어에 중첩하세요. dom 노드를 생성하지 않음), 이 레이어에서 v-if 판단을 수행한 후 내부적으로 v-for 루프를 수행합니다
<template v-if="isShow"> <p v-for="item in items"> </template>
루프 내부에 조건이 나타나면 표시할 필요가 없는 항목을 필터링할 수 있습니다. 계산된 속성을 통해 진행 computed: {
items: function() {
return this.list.filter(function (item) {
return item.isShow
})
}
}
사례 설명:
이유: v-for는 v-if보다 우선순위가 더 높기 때문에 매번 전체 배열을 순회해야 하므로 불필요한 계산이 발생하고 성능에 영향을 미칩니다.
예를 들어 , 페이지에서 v-for를 사용하여 100개의 li 태그를 반복하지만 index=97인 li 태그의 내용만 표시하고 나머지는 숨깁니다.
100개의 목록에 하나의 데이터만 사용해야 하는 경우에도 전체 배열을 반복합니다.- {{item.name}}
<ul> <li v-for="item in activeList">{{item.name}}</li> </ul> computed: { activeList() { return this.list.filter(val => { return val.actived; }); } },사용[관련 권장 사항: vuejs 비디오 튜토리얼,
웹 프론트 엔드 개발
]위 내용은 vue에서 v-if와 v-for의 차이점은 무엇입니까의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

반응 성능 병목 현상은 주로 비효율적 인 렌더링, 불필요한 재 렌더링 및 구성 요소 내부 중량의 계산으로 인해 발생합니다. 1) ReactDevTools를 사용하여 느린 구성 요소를 찾아서 React.Memo 최적화를 적용하십시오. 2) useeffect를 최적화하여 필요할 때만 실행되도록하십시오. 3) 메모리 처리에는 usememo 및 usecallback을 사용하십시오. 4) 큰 구성 요소를 작은 구성 요소로 분할하십시오. 5) 빅 데이터 목록의 경우 가상 스크롤 기술을 사용하여 렌더링을 최적화하십시오. 이러한 방법을 통해 React Applications의 성능을 크게 향상시킬 수 있습니다.

누군가는 성능 문제, 학습 곡선 또는 다른 UI 개발 방법을 탐색하여 반응 할 대안을 찾을 수 있습니다. 1) vue.js는 소형 및 대규모 응용 프로그램에 적합한 통합 및 가벼운 학습 곡선의 용이성으로 칭찬받습니다. 2) Angular는 Google에 의해 개발되며 강력한 유형 시스템 및 종속성 주입을 통해 대규모 응용 프로그램에 적합합니다. 3) Svelte는 빌드 타임에 효율적인 JavaScript로 컴파일하여 탁월한 성능과 단순성을 제공하지만 생태계는 여전히 성장하고 있습니다. 대안을 선택할 때 프로젝트 요구, 팀 경험 및 프로젝트 규모에 따라 결정해야합니다.

keysinReactarespecialattributesSassignedToElementsInArraysforraysfortableIdentity, CrucialThereconciliationAlgorithm WhichupDatesThemonficially

ToreDuceseTupoverHeadInReactProjects, usetoolslikecreateActapp (CRA), Next.js, Gatsby, Orstarterkits 및 메인 교도소 E.1) crasimplifiessetupwithinglecommand.2) next.jsandgatsbyoffermorefeaturesbutaLearningCurve.3) StarterKitsProvideCorgeni

usestate () isareacthookusedtomanagestatefunctionalcomponents.1) itinitializesandupdatesstate, 2) workaledtthetThetThepleFcomponents, 3) canleadto'Stalestate'ifnotusedCorrecrally 및 4) performancanoptimizedUsecandusecaldates.

Reactispopularduetoitscomponent 기반 아카데입, 가상, Richcosystem 및 declarativenature.1) 구성 요소 기반 ectureallowsforeusableuipieces, Modularityandmainability 개선 가능성.

TodebugreactApplicationseffective, UsetheseStradegies : 1) 주소 propdrillingwithContapiorredux.2) handleaSnchronousOperationswithUsestAndUseefect, abortControllerTopReceConditions.3) 최적화 formanceSeMoAnduseCalbackTooid


핫 AI 도구

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

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

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

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

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터
Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.

ZendStudio 13.5.1 맥
강력한 PHP 통합 개발 환경

맨티스BT
Mantis는 제품 결함 추적을 돕기 위해 설계된 배포하기 쉬운 웹 기반 결함 추적 도구입니다. PHP, MySQL 및 웹 서버가 필요합니다. 데모 및 호스팅 서비스를 확인해 보세요.

PhpStorm 맥 버전
최신(2018.2.1) 전문 PHP 통합 개발 도구
