我有一個emptyRowsRemoved從 Reactivity API 派生的計算值。我需要迭代這個值。但是因為computed()回傳一個代理,我不能再用.forEach.
我很好奇,迭代代理的唯一方法是unRef值嗎?似乎應該有某種方法來迭代代理。我搜索了這個,但我找不到這個問題的答案。
uj5u.com熱心網友回復:
computed()不回傳Proxy. 相反,它回傳一個ref,其value屬性包含目標資料。
我很好奇,迭代代理的唯一方法是取消參考值嗎?
實際上,您確實需要解開refwith unref(),或者直接參考其.value屬性來訪問目標陣列資料(除非使用下面描述的新反應性轉換)。
假設您的用法包括 a ,computed()其值為 a Proxy,例如在這個人為的示例中:
const myComputedProxy = computed(() => proxyOf(/* my array */))
...Proxy本身應該完全像目標變數一樣對待。如果Proxy用于陣列,則Proxy直接使用 ,就像它是陣列本身一樣。也就是說,您可以.forEach()在 上使用Proxy,它將呼叫轉發到底層Array:
myComputedProxy.value.forEach(x => console.log(x))
// or
import { unref } from 'vue'
unref(myComputedProxy).forEach(x => console.log(x))
演示 1
使用反應性變換
但是,Vue 3 的Reactivity Transform(實驗性自[email protected])避免了解包 的要求ref,但您必須使用<script setup>塊(而不是setup()在選項 API 中)。使用全域定義的(或)編譯器宏代替 import computed(或ref) from :vue$computed$ref
<script setup> ??
const myComputedProxy = $computed(() => proxyOf(/* my array */))
myComputedProxy.forEach(x => console.log(x))
</script>
演示 2
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/381426.html
標籤:Vue.js Vuejs3 vue-composition-api javascript代理
上一篇:缺少型別的屬性(打字稿)
