[英]Using readonly on a reactive object
假設您有一個reactive
object,您希望按照此處的說明將其導出為readonly
。
import { reactive, readonly } from '@vue/composition-api'
const graph = reactive({
profile: {
givenName: '',
surName: '',
}
})
return {
profile: () => readonly(graph.profile)
}
readonly()
方法似乎不是 VueCompositionAPI 的一部分:
“在 '@vue/composition-api' 中找不到導出 'readonly'
我知道使用ref
時,您可以簡單地使用computed
屬性
return {
profile: computed(() => graph.profile)
}
但是對於reactive
object,我們不想每次都使用.value
,這似乎是不可能的。 我在這里錯過了一些非常明顯的東西嗎?
是的,由於語言(JS)的限制, reactive
不屬於組合 api 插件。 Vue 3.0 將通過代理解決這個問題。
第二個問題,我給你一個直接的答案:不,你不能在不使用計算屬性的情況下將反應值作為只讀屬性返回。 如果您不使用代理實現(Vue 3.0+),這是不可能的。
如果你問我,我會 go 根據你的reactive
式 state 定義computed
變量塊。
const graph = reactive({
profile: {
givenName: '',
surName: '',
}
})
return {
profile: computed(() => graph.profile),
another: computed(() => graph.another)
}
您必須使用.value
但至少您的回報會更清晰,並且您將允許 object 解構而不會破壞反應性。 如果我們對最后一種方法有創意,您甚至可以創建自己的助手:
function readonlyState(state) {
const computeds = {}
for (let key in state) {
computeds[key] = computed(() => state[key])
}
return computeds
}
並使用它:
const graph = reactive({
profile: {
givenName: '',
surName: '',
}
})
return readonlyState(state) // { profile }
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.