mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-25 07:05:11 +00:00
fix(nuxt): access shared asyncData state with useNuxtData
(#22277)
This commit is contained in:
parent
6439244c96
commit
a6d6fde9df
@ -1,4 +1,4 @@
|
|||||||
import { getCurrentInstance, onBeforeMount, onServerPrefetch, onUnmounted, ref, shallowRef, toRef, unref, watch } from 'vue'
|
import { computed, getCurrentInstance, onBeforeMount, onServerPrefetch, onUnmounted, ref, shallowRef, toRef, unref, watch } from 'vue'
|
||||||
import type { Ref, WatchSource } from 'vue'
|
import type { Ref, WatchSource } from 'vue'
|
||||||
import type { NuxtApp } from '../nuxt'
|
import type { NuxtApp } from '../nuxt'
|
||||||
import { useNuxtApp } from '../nuxt'
|
import { useNuxtApp } from '../nuxt'
|
||||||
@ -461,7 +461,18 @@ export function useNuxtData<DataT = any> (key: string): { data: Ref<DataT | null
|
|||||||
}
|
}
|
||||||
|
|
||||||
return {
|
return {
|
||||||
data: toRef(nuxtApp.payload.data, key)
|
data: computed({
|
||||||
|
get () {
|
||||||
|
return nuxtApp._asyncData[key]?.data.value ?? nuxtApp.payload.data[key]
|
||||||
|
},
|
||||||
|
set (value) {
|
||||||
|
if (nuxtApp._asyncData[key]) {
|
||||||
|
nuxtApp._asyncData[key]!.data.value = value
|
||||||
|
} else {
|
||||||
|
nuxtApp.payload.data[key] = value
|
||||||
|
}
|
||||||
|
}
|
||||||
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -274,6 +274,26 @@ describe('useAsyncData', () => {
|
|||||||
|
|
||||||
expect(promiseFn).toHaveBeenCalledTimes(2)
|
expect(promiseFn).toHaveBeenCalledTimes(2)
|
||||||
})
|
})
|
||||||
|
|
||||||
|
it('should be synced with useNuxtData', async () => {
|
||||||
|
const { data: nuxtData } = useNuxtData('nuxtdata-sync')
|
||||||
|
const promise = useAsyncData('nuxtdata-sync', () => Promise.resolve('test'), { default: () => 'default' })
|
||||||
|
const { data: fetchData } = promise
|
||||||
|
|
||||||
|
expect(fetchData.value).toMatchInlineSnapshot('"default"')
|
||||||
|
|
||||||
|
nuxtData.value = 'before-fetch'
|
||||||
|
expect(fetchData.value).toMatchInlineSnapshot('"before-fetch"')
|
||||||
|
|
||||||
|
await promise
|
||||||
|
expect(fetchData.value).toMatchInlineSnapshot('"test"')
|
||||||
|
expect(nuxtData.value).toMatchInlineSnapshot('"test"')
|
||||||
|
|
||||||
|
nuxtData.value = 'new value'
|
||||||
|
expect(fetchData.value).toMatchInlineSnapshot('"new value"')
|
||||||
|
fetchData.value = 'another value'
|
||||||
|
expect(nuxtData.value).toMatchInlineSnapshot('"another value"')
|
||||||
|
})
|
||||||
})
|
})
|
||||||
|
|
||||||
describe('useFetch', () => {
|
describe('useFetch', () => {
|
||||||
|
Loading…
Reference in New Issue
Block a user