From 2fb58ae2bec264c559a851d5b8807cd21d8b0aef Mon Sep 17 00:00:00 2001 From: Anthony Fu Date: Tue, 12 Oct 2021 22:49:18 +0800 Subject: [PATCH] feat(bridge): init function for `useState` (#773) --- packages/bridge/src/runtime/composables.ts | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/packages/bridge/src/runtime/composables.ts b/packages/bridge/src/runtime/composables.ts index 512f46a089..0f6630ffac 100644 --- a/packages/bridge/src/runtime/composables.ts +++ b/packages/bridge/src/runtime/composables.ts @@ -1,4 +1,4 @@ -import { reactive, toRef, isReactive } from '@vue/composition-api' +import { reactive, toRef, isReactive, Ref } from '@vue/composition-api' import type VueRouter from 'vue-router' import type { Route } from 'vue-router' import { useNuxtApp } from './app' @@ -41,7 +41,7 @@ export const useRoute = () => { } // payload.state is used for vuex by nuxt 2 -export const useState = (key: string) => { +export const useState = (key: string, init?: (() => T)): Ref => { const nuxtApp = useNuxtApp() if (!nuxtApp.payload.useState) { nuxtApp.payload.useState = {} @@ -49,5 +49,9 @@ export const useState = (key: string) => { if (!isReactive(nuxtApp.payload.useState)) { nuxtApp.payload.useState = reactive(nuxtApp.payload.useState) } - return toRef(nuxtApp.payload.useState, key) + const state = toRef(nuxtApp.payload.useState, key) + if (state.value === undefined && init) { + state.value = init() + } + return state }