vue3 객체 속성 변경

WBOY
풀어 주다: 2023-05-25 11:19:37
원래의
1845명이 탐색했습니다.

Vue3의 공식 출시로 개발자들은 새 버전에서 제공되는 새로운 기능과 개선 사항을 빨리 시험해보고 싶어합니다. 가장 눈에 띄는 변화 중 하나는 객체 속성의 변화입니다. Vue2에서 객체 속성의 변경 사항을 모니터링하려면 심층 관찰을 사용하거나 $watch를 사용하여 속성 변경 사항을 수동으로 모니터링해야 합니다. 하지만 Vue3에서는 이 문제가 해결되었습니다.

Vue3은 프록시 객체를 사용하여 객체 속성 변경에 대한 자동 모니터링 및 응답 메커니즘을 제공합니다. 즉, Vue3에서 일반 JavaScript 객체처럼 객체를 작동할 수 있으며 자동으로 뷰 업데이트를 트리거할 수 있습니다.

구체적인 구현 내용을 살펴보겠습니다.

먼저 내부에 상태 개체가 포함된 Vue3 구성 요소가 있고 개체 속성의 변경 사항을 수신하려고 한다고 가정합니다. 이 객체를 정의하고 이를 구성 요소의 상태에 할당할 수 있습니다.

<template>
  <div>
    <p>属性A: {{ obj.A }}</p>
    <p>属性B: {{ obj.B }}</p>
  </div>
</template>

<script>
export default {
  data() {
    return {
      obj: {
        A: '初始值A',
        B: '初始值B'
      }
    }
  }
}
</script>
로그인 후 복사

Vue2에서 객체 속성의 변경 사항을 모니터링하려면 $watch 또는 $watchEffect를 사용하여 각 속성의 변경 사항을 수동으로 모니터링해야 합니다. 예:

this.$watch('obj.A', (newValue, oldValue) => {
  console.log(`属性A发生了变化:${oldValue} => ${newValue}`)
})
로그인 후 복사

Vue3에서는 Proxy 객체를 사용하여 $watch 또는 $watchEffect를 작성하지 않고도 대상 객체의 모든 속성 변경을 수신할 수 있습니다.

<script>
export default {
  data() {
    return {
      obj: {
        A: '初始值A',
        B: '初始值B'
      }
    }
  },
  created() {
    this.obj = new Proxy(this.obj, {
      set(target, key, value, receiver) {
        // 触发视图更新
        return Reflect.set(target, key, value, receiver)
      }
    })
  }
}
</script>
로그인 후 복사

컴포넌트가 생성될 때 상태 객체를 Proxy 객체로 래핑합니다. . 객체의 속성을 수정하면 Proxy 객체가 자동으로 뷰 업데이트를 트리거합니다.

프록시 개체의 설정 기능은 개체 속성이 수정되면 자동으로 호출됩니다. 이 시점에서 속성 변경 사항을 인쇄하거나 다른 구성 요소에 알리는 등의 자체 논리를 set 함수에 추가할 수 있습니다. 그러나 제어 흐름이 Vue 업데이트 메커니즘으로 돌아가고 뷰가 올바르게 업데이트되도록 하려면 Reflect.set(target, key, value, receive) 문이 마지막에 반환되는지 확인해야 합니다.

위의 예는 단순한 데모일 뿐입니다. Vue3의 프록시 객체는 사용자 정의 getter 및 setter, 속성 권한 확인 등을 포함하여 보다 유연한 객체 속성 모니터링을 위한 더 많은 기능과 옵션을 구현합니다. 관심 있는 개발자는 Vue3의 공식 문서를 참조하여 심층적인 연구를 수행할 수 있습니다.

간단히 말해서, Vue3의 프록시 객체를 사용하면 구성 요소 내부의 객체를 보다 자연스럽게 조작할 수 있을 뿐만 아니라 속성 변경을 수동으로 모니터링하기 위한 지루한 코드의 양도 줄일 수 있습니다. 이는 우리의 개발에 더욱 효율적이고 편리한 경험을 제공합니다.

위 내용은 vue3 객체 속성 변경의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿