찾다
웹 프론트엔드프런트엔드 Q&Avue에서 v-if와 v-for의 차이점은 무엇입니까

v-if와 v-for의 차이점: 1. 다른 기능 v-if 명령은 조건부로 내용을 렌더링하는 데 사용됩니다. 이 내용은 명령의 표현식이 true를 반환하는 경우에만 렌더링됩니다. value; while v -for 지시문은 배열을 기반으로 목록을 렌더링합니다. 2. 우선순위가 다릅니다. v-if보다 우선순위가 높습니다. if 판단 시 v-for가 v-if보다 먼저 판단됩니다.

vue에서 v-if와 v-for의 차이점은 무엇입니까

이 튜토리얼의 운영 환경: 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(&#39;div&#39;, { attrs: { "id": "app" } }, 
  _l((items), function (item) { return (isShow) ? _c(&#39;p&#39;, [_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(&#39;div&#39;,{attrs:{"id":"app"}},
  [(isShow)?[_v("\n"),
  _l((items),function(item){return _c(&#39;p&#39;,[_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 === &#39;template&#39; && !el.slotTarget && !state.pre) {
  return genChildren(el, state) || &#39;void 0&#39;
 } else if (el.tag === &#39;slot&#39;) {
  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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
React의 SEO 친화적 인 특성 : 검색 엔진 가시성 향상React의 SEO 친화적 인 특성 : 검색 엔진 가시성 향상Apr 26, 2025 am 12:27 AM

예, ReactApplicationsCanbeseo 친화적 인 전략적 전략

React의 성능 병목 현상 : 느린 구성 요소 식별 및 최적화React의 성능 병목 현상 : 느린 구성 요소 식별 및 최적화Apr 26, 2025 am 12:25 AM

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

React의 대안 : 다른 JavaScript UI 라이브러리 및 프레임 워크 탐색React의 대안 : 다른 JavaScript UI 라이브러리 및 프레임 워크 탐색Apr 26, 2025 am 12:24 AM

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

Keys and React의 조정 알고리즘 : 성능 향상Keys and React의 조정 알고리즘 : 성능 향상Apr 26, 2025 am 12:21 AM

keysinReactarespecialattributesSassignedToElementsInArraysforraysfortableIdentity, CrucialThereconciliationAlgorithm WhichupDatesThemonficially

RECT 프로젝트에 필요한 보일러 플레이트 코드 : 설정 오버 헤드 감소RECT 프로젝트에 필요한 보일러 플레이트 코드 : 설정 오버 헤드 감소Apr 26, 2025 am 12:19 AM

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

usestate () 이해 : 국가 관리에 대한 포괄적 인 안내서usestate () 이해 : 국가 관리에 대한 포괄적 인 안내서Apr 25, 2025 am 12:21 AM

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

React 사용의 장점은 무엇입니까?React 사용의 장점은 무엇입니까?Apr 25, 2025 am 12:16 AM

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

React의 디버깅 : 일반적인 문제를 식별하고 해결합니다React의 디버깅 : 일반적인 문제를 식별하고 해결합니다Apr 25, 2025 am 12:09 AM

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

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 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

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

ZendStudio 13.5.1 맥

ZendStudio 13.5.1 맥

강력한 PHP 통합 개발 환경

맨티스BT

맨티스BT

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

PhpStorm 맥 버전

PhpStorm 맥 버전

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