찾다

 >  Q&A  >  본문

반응 맵에서 Vue Compute()가 실행되지 않습니다.

처음에 빈 맵 주위에 reactive가 있습니다: const map =reactive({});, 그리고 맵에 키 "key"가 있는지 알려주는 const map =reactive({});,以及一个计算,它告诉如果地图有一个键“key”:const mapContainsKeyCompulated = Computed(() => map.hasOwnProperty("key"))compute

: const mapContainsKeyCompulated = Computed(() => map.hasOwnProperty("key")). 지도를 변경하면 계산이 업데이트되지 않습니다.

저는 하루 동안 이 문제에 매달렸고 문제를 보여주는 최소한의 예를 생각해 냈습니다.

으아악

많은 stackoverflow 답변과 Vue 문서를 읽었지만 여전히 이해할 수 없습니다.

EDIT: @estus-flask가 언급했듯이 이는 3.2.46에서 수정된 VueJS 버그입니다. 🎜
P粉127901279P粉127901279303일 전434

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

  • P粉668146636

    P粉6681466362024-03-28 00:34:51

    Vue 반응형에는 반응형 객체 메서드에 대한 명시적인 지원이 필요합니다. hasOwnProperty 是相当低级的,因此它已经有一段时间不受支持了。如果没有支持,map.hasOwnProperty(key) 会尝试访问非反应性原始对象上的key,并且不会触发反应性,因此第一个计算< /code> 调用不会设置可以在下一次 map 변화에 따라 실행되는 리스너.

    이 문제를 해결하는 한 가지 방법은 Vue 2 및 3에서 반응형 작업을 수행하는 전통적인 방법인 key(다른 답변에서 제안됨)을 먼저 정의하는 것입니다.

    으아아아

    또 다른 방법은 반응 객체의 누락된 key 속성에 액세스하는 것입니다.

    으아아아

    또 다른 방법은 in 运算符。由于 Vue 3 使用 Proxy 进行响应,因此可以通过 has 트랩을 사용하여 속성에 액세스할 때를 감지하는 것입니다.

    으아아아

    hasOwnProperty에 대한 지원이 최근 3.2.46에 추가되었으므로 질문의 코드는 최신 Vue 버전에서 작동해야 합니다.

    map 并不是真正的地图。如果使用 Map,这在任何 Vue 3 版本中都会有所不同,Vue 支持它,并且预计 map.has(key) 반응성을 유발합니다.

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