Vue 사용자 정의 구성 요소 양 방향 바 인 딩 실현 원리 및 방법 상세 설명
어떠한 언어 나 구조 에서 도 우 리 는 코드 의 재 활용 성 을 제창한다.Vue 에 게 도 마찬가지 로 같은 코드 논 리 는 구성 요소 로 봉 인 될 수 있 으 며,재 활용 외 에 도 통일 적 인 관리 로 개발 효율 을 높이 는 것 이 중요 하 다.나 는 정말 하나의 항목 을 인수 한 적 이 있다.여러 페이지 가 사용 할 수 있 는 목록 은 목록 구성 요 소 를 봉인 하지 않 았 다.조금 만 바 뀌 면 모든 페이지 를 추가 해 야 한다.모듈 화 되 지 않 은 Vue 프로젝트 는 영혼 이 없다 는 것 은 분명 하 다.그래서 우아 하고 재 활용 성 이 높 은 구성 요 소 를 어떻게 포장 하 느 냐 가 우리 에 게 필요 한 기능 이 되 었 습 니 다.
탭 사용자 정의 구성 요소
먼저 Tab 구성 요소 의 실현 을 살 펴 보고 어떤 문제 가 있 는 지,어디서 개선 할 수 있 습 니까?
효과.
구성 요소
<template>
<div class="tabs">
<div
class="tab-item"
:class="{'tab--active':item===activeName}"
v-for="(item,index) in tabs"
:key="index"
@click="tabChange(item)">
{{item}}
</div>
</div>
</template>
<script>
export default {
props:{
tabs:{
type: Array,
default: ()=> []
},
activeName:{
type: String,
default: ''
}
},
methods:{
tabChange(item){
this.$emit('tabChange',item)
}
},
}
</script>
쓰다
<template>
<div>
<Tabs :tabs="tabs" :activeName="activeName" @tabChange="tabChange" />
</div>
</template>
<script>
import Tabs from '../components/Tabs'
export default {
components:{
Tabs
},
data(){
return{
tabs:[' ',' ',' ',' ',' '],
activeName: ' '
}
},
methods:{
tabChange(item){
this.activeName = item
}
},
}
</script>
이 구성 요소 의 가장 큰 문 제 는 activeName 사용자 가 이 벤트 를 통 해 수 동 으로 업데이트 해 야 한 다 는 것 입 니 다.만약 다른 사용자 가 인수 한다 면 이 를 모 르 고 사용 하면 tab 가 전환 되 지 않 은 상황 이 발생 할 수 있 습 니 다.그리고 구성 요소 내부 의 실현 을 보고 코드 를 수정 해 야 합 니 다.이러한 구성 요 소 는 실패 한 것 이 분명 합 니 다.모든 더러 운 일 은 구성 요소 에 의 해 이 루어 진 다 는 원칙 에 따라 이상 적 인 상 태 는 사용자 가 activeName 을 관리 하지 않 고 구성 요소 내부 에서 업데이트 하 는 것 이 어야 합 니 다.어떻게 prop 수정 을 개선 합 니까?
내부 관리 가 필요 하 다 면 구성 요소 내부 에서 prop 의 값 을 수정 하면 되 지 않 을 까 하 는 생각 이 들 수도 있 습 니 다.이런 방법 이 실행 가능 한 지 를 살 펴 보 자.
구성 요소 tabChange 방법 을 수정 하고 클릭 할 때 prop 의 값 을 업데이트 합 니 다.
tabChange(item){
this.activeName = item
this.$emit('tabChange',item)
}
사용 시 콘 솔 에서 경 고 를 던 집 니 다.prop 는 단 방향 데이터 흐름 이기 때문에 부모 prop 의 업 데 이 트 는 하위 구성 요소 로 아래로 이동 합 니 다.반대로 하위 구성 요소 내부 에서 직접 업 데 이 트 된 상 태 는 데이터 의 흐름 이 명확 하지 않 습 니 다.예 를 들 어 부모 구성 요소 중 여러 개의 하위 구성 요소 가 같은 속성 에 의존 하고 있 습 니 다.그 중 한 개의 하위 구성 요소 가 이 속성 을 업데이트 하면 나머지 하위 구성 요소 가 바 뀌 고 문제 가 발생 했 을 때 쉽게 찾 을 수 없 기 때문에 Vue 는 이렇게 하 는 것 을 추천 하지 않 습 니 다.또한 부모 구성 요소 가 업데이트 되 었 을 때 하위 구성 요소 의 prop 는 최신 값 으로 갱 신 됩 니 다.
단 방향 데이터 흐름: https://cn.vuejs.org/v2/guide/components-props.html#%E5%8D%95%E5%90%91%E6%95%B0%E6%8D%AE%E6%B5%81
정 해:model 옵션 개선 구성 요소
모듈 모델 옵션
사용자 정의 구성 요소 가 v-model 을 사용 할 때 prop 와 이 벤트 를 맞 출 수 있 도록 합 니 다.기본 적 인 상황 에서 한 구성 요소 의 v-model 은 value 를 prop 로 사용 하고 input 을 이벤트 로 사용 하지만,일부 입력 유형 은 체크 상자 와 체크 상자 단 추 를 사용 하여 서로 다른 목적 을 달성 하려 고 할 수 있 습 니 다.model 옵션 을 사용 하면 이러한 상황 에서 발생 하 는 충돌 을 피 할 수 있 습 니 다.
model: https://cn.vuejs.org/v2/api/
model 옵션 에서 속성 을 연결 하고 이 벤트 를 추가 할 수 있 습 니 다.호출 방법 에 값 을 입력 하면 속성 을 업데이트 할 수 있 습 니 다.
<script>
export default {
model:{
prop: 'activeName',
event: 'update'
},
props:{
tabs:{
type: Array,
default: ()=> []
},
activeName:{
type: String,
default: ''
}
},
methods:{
tabChange(item){
this.$emit('update',item) // activeName
this.$emit('tabChange',item)
}
}
}
</script>
구성 요소 의 props 옵션 에서 prop 를 설명 해 야 합 니 다.쓰다
구성 요소 의 양 방향 연결 을 사용 하면 구성 요소 내부 에서 속성 이 업 데 이 트 될 때 부모 구성 요소 의 activeName 도 이에 따라 업 데 이 트 됩 니 다.사용자 가 데이터 가 수 정 될 수 있다 는 것 을 명확 하 게 알 수 있 습 니 다.
<Tabs :tabs="tabs" v-model="activeName" />
총결산구성 요소 의 model 옵션 을 사용 하여 사용자 정의 구성 요소 의 양 방향 연결 을 실현 합 니 다.구성 요소 내부 에서 이벤트 로 속성 값 을 업데이트 합 니 다.이러한 사용자 정의 구성 요 소 는 사용 하기에 더욱 우아 합 니 다.사실 model 옵션 을 통 해 부모 급 속성 을 수정 하 는 것 은 단 방향 데이터 흐름 의 원칙 에 약간 위배 된다 고 생각 합 니 다.원래 단 방향 데이터 흐름 은 하위 급 이 부모 급 속성 을 수정 하 는 것 을 허용 하지 않 습 니 다.v-model 의 문법 설탕 만 사용 하면 데이터 흐름 을 더욱 명확 하 게 보이 고 이 단점 을 보완 할 수 있 습 니 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Vue Render 함수로 DOM 노드 코드 인스턴스 만들기render에서createElement 함수를 사용하여 DOM 노드를 만드는 것은 직관적이지 않지만 일부 독립 구성 요소의 디자인에서 특수한 수요를 충족시킬 수 있습니다.간단한 렌더링 예는 다음과 같습니다. 또한 v...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.