Да, reactive
не относится к плагину композиции api из-за ограничений языка (JS). Vue 3.0 решит это через прокси.
Второй вопрос, я дам вам прямой ответ: нет , вы не можете вернуть реактивное значение как доступное только для чтения свойство без использования вычисляемого свойства. Это невозможно, если вы не используете реализацию прокси (Vue 3.0 +).
Если вы спросите меня, я бы go с определением фрагментов computed
варов на основе вашего reactive
state.
const graph = reactive({
profile: {
givenName: '',
surName: '',
}
})
return {
profile: computed(() => graph.profile),
another: computed(() => graph.another)
}
Вам нужно будет использовать .value
, но, по крайней мере, ваш результат будет более четким, и вы разрешите деструктуризацию объекта, не снижая реактивность. Если проявить творческий подход к последнему подходу, вы даже можете создать своего собственного помощника:
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 }