찾다

 >  Q&A  >  본문

Vue3은 Vue2처럼 클래스 필드의 내부 업데이트에 반응하지 않습니다.

Vue2에서는 요소를 클래스의 속성에 바인딩할 수 있으며 Vue 세계 외부에서 해당 속성이 변경되면 요소가 업데이트된다는 점을 확인했지만 Vue3에서는 가능하지 않은 것 같습니다.

여기서 의미를 설명하기 위해 두 가지 간단한 예를 만들었습니다.

Vue2: https://codesandbox.io/s/vue2-6hztv

Vue3: https://codesandbox.io/s/vue3-o2rfn

클래스 필드를 증가시키는 내부 타이머가 있는 클래스가 있습니다. Vue2에서는 myClass.field에 바인딩된 요소가 올바르게 업데이트되지만 Vue3에서는 아무 일도 일어나지 않습니다.

내 질문은

<强>1. 여기서 Vue2와 Vue3 사이에 차이점이 있는 이유는 무엇입니까?

<强>2. Vue2 예제와 같은 것을 Vue3에서 어떻게 달성할 수 있나요?

Vue 라이프사이클 메서드 내에서는 타이머를 실행할 수 없습니다. 클래스 필드는 스스로 업데이트되어야 합니다.

작동하지 않는 Vue3 코드는 다음과 같습니다.

HTML:

으아악

자바스크립트:

<div id="app">{{ myClass.field }}</div>

P粉274161593P粉274161593375일 전410

모든 응답(1)나는 대답할 것이다

  • P粉709644700

    P粉7096447002024-01-30 11:34:35

    Vue 3에서 프록시 객체를 생성하여 이 답변에 설명된 대로 반응성을 활성화합니다. 생성자의 this는 프록시가 아닌 원래 클래스 인스턴스를 참조하므로 반응할 수 없습니다.

    해결책은 클래스 생성자와 this반응성이 있을 것으로 예상되는 부작용 설정을 분리하는 것입니다. 설정 방법을 사용하면 유창한 인터페이스 패턴이 가능해 사용이 더 쉬워집니다.

    으아아아

    옵션 API에서는 다음과 같습니다:

    으아아아

    컴포지션 API에서는 다음과 같습니다::

    으아아아

    회신하다
    0
  • 취소회신하다