Skip to content

Commit 254eec7

Browse files
authored
fix: reference the store directly in storeToRefs to ensure correct reactivity after HMR (#2795)
1 parent e645fc1 commit 254eec7

File tree

2 files changed

+23
-3
lines changed

2 files changed

+23
-3
lines changed

packages/pinia/__tests__/storeToRefs.spec.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import { describe, beforeEach, it, expect } from 'vitest'
22
import { computed, reactive, ref, ToRefs } from 'vue'
33
import { createPinia, defineStore, setActivePinia, storeToRefs } from '../src'
4+
import { set } from 'vue-demi'
45

56
describe('storeToRefs', () => {
67
beforeEach(() => {
@@ -170,6 +171,25 @@ describe('storeToRefs', () => {
170171
expect(refs.n.value).toBe(2)
171172
})
172173

174+
it('keep reactivity', () => {
175+
const store = defineStore('a', () => {
176+
const n = ref(0)
177+
const double = computed(() => n.value * 2)
178+
return { n, double }
179+
})()
180+
181+
const { double } = storeToRefs(store)
182+
183+
// Assuming HMR operation
184+
set(
185+
store,
186+
'double',
187+
computed(() => 1)
188+
)
189+
190+
expect(double.value).toEqual(1)
191+
})
192+
173193
tds(() => {
174194
const store1 = defineStore('a', () => {
175195
const n = ref(0)

packages/pinia/src/storeToRefs.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -94,11 +94,11 @@ export function storeToRefs<SS extends StoreGeneric>(
9494
// @ts-expect-error: toRefs include methods and others
9595
return toRefs(store)
9696
} else {
97-
store = toRaw(store)
97+
const rawStore = toRaw(store)
9898

9999
const refs = {} as StoreToRefs<SS>
100-
for (const key in store) {
101-
const value = store[key]
100+
for (const key in rawStore) {
101+
const value = rawStore[key]
102102
if (isRef(value) || isReactive(value)) {
103103
// @ts-expect-error: the key is state or getter
104104
refs[key] =

0 commit comments

Comments
 (0)