Vue.$set 실효 구덩이 문제 발견 및 해결 방안
 
 데이터 필터 추가 가 필요 합 니 다.왼쪽 은 컨트롤 입 니 다.중간 은 조건 이 고 오른쪽 은 값 입 니 다.
컨트롤 에 따라 값 옵션 컨트롤 을 렌 더 링 하기 때 문 입 니 다.
    <el-form inline >
      <el-form-item style="margin-bottom: 20px;">
        <el-select v-model="data[props.prop]" @change="data[props.value] = ''">
          <el-option
            v-for="item in controls"
            :key="item.id"
            :value="item.id"
            :label="item.label">
          </el-option>
        </el-select>
      </el-form-item>
      <el-form-item style="margin-bottom: 20px;">
        <el-select v-model="data[props.type]">
          <el-option
            v-for="item in condition"
            :key="item.code"
            :value="item.code"
            :label="item.name"
          ></el-option>
        </el-select>
      </el-form-item>
      <el-form-item style="margin-bottom: 20px;">
        <FormControl v-if="control" :control="control" :value="data[props.value]" @input="onValueChange" ></FormControl>
        <el-input v-else :value="data[props.value]" @input="onValueChange"></el-input>
      </el-form-item>
      <el-form-item>
        <el-button type="primary" icon="el-icon-plus" @click="add"></el-button>
      </el-form-item>
    </el-form>
{
  props:{
    props: {
      type: Object,
      default: () => ({
        prop: 'prop',
        value: 'value',
        type: 'type'
      })
    }
  },
  data(){
    return {
      data:{
        
      }
    }
  },
  methods:{
    onValueChange(val){
      this.$set(this.data, this.props.value, val)
    }
  }
  //...
}컨트롤 ID 의 불확실 성 으로 인해 모든 data 가 key 를 미리 설정 하지 못 해 자 연 스 럽 게 응답 할 수 없 기 때문에 onValue Change 에서 this.$set 동적 으로 데 이 터 를 추가 하여 응답 을 실현 합 니 다.
 
 재현 하면 값 입력 상자 안의 데이터 가 실시 간 으로 응답 하지 않 는 것 을 발견 할 수 있 습 니 다.
$set 를 사 용 했 는데 테스트 에 응답 하지 못 했 는데 컨트롤 을 바 꾸 면 value 값 이 응답 하지 않 는 다 는 것 을 알 게 되 었 습 니 다.하지만 전환 하기 전에 아무 것 이나 입력 하고 전환 하면 괜 찮 습 니 다.
또 한 차례 조사 한 후에 발견 되 었 다.
<el-select v-model="data[props.prop]" @change="data[props.value] = ''">문 제 는 data[props.value]='
Vue 소스 코드 보기
//vue/src/core/observer/index.js      
 
/**
 * Set a property on an object. Adds the new property and
 * triggers change notification if the property doesn't
 * already exist.
 */
export function set (target: Array<any> | Object, key: any, val: any): any {
  if (process.env.NODE_ENV !== 'production' &&
    (isUndef(target) || isPrimitive(target))
  ) {
    warn(`Cannot set reactive property on undefined, null, or primitive value: ${(target: any)}`)
  }
  if (Array.isArray(target) && isValidArrayIndex(key)) {
    target.length = Math.max(target.length, key)
    target.splice(key, 1, val)
    return val
  }
  if (key in target && !(key in Object.prototype)) {
    target[key] = val
    return val
  }
  const ob = (target: any).__ob__
  if (target._isVue || (ob && ob.vmCount)) {
    process.env.NODE_ENV !== 'production' && warn(
      'Avoid adding reactive properties to a Vue instance or its root $data ' +
      'at runtime - declare it upfront in the data option.'
    )
    return val
  }
  if (!ob) {
    target[key] = val
    return val
  }
  defineReactive(ob.value, key, val)
  ob.dep.notify()
  return val
}구 덩이 는 Vue.$set 문 서 를 여러 번 뒤 져 보 았 지만$set 가 존재 하 는 key 에 모니터링 대상 을 추가 할 수 없습니다.
data[props.value]=','onValueChange(')로 변경 하여 문 제 를 완벽 하 게 해결 합 니 다.
 
 총결산
Vue.$set 이전에 반드시 대상 내 key 가 존재 하지 않 아야 합 니 다.그렇지 않 으 면 값 만 업데이트 되 고 이 Key 에 응답 모니터링 을 추가 하지 않 습 니 다.
이상 은 개인 적 인 경험 이 므 로 여러분 에 게 참고 가 되 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.