原因:
import { defineStore } from 'pinia'
interface CounterState {
count: number;
name: string;
}
export const useCounterStore = defineStore('counter', {
state: () => ({ count: 10, name: 'Eduardo' }),
getters: {
doubleCount: (state:CounterState) => state.count * 3,
},
actions: {
increment() {
(this as unknown as CounterState).count += 1
},
},
})
当我们修改这里的count并不会引起vite项目的热更新;
我从 Vuex 切换到 Pinia,但遇到了“热模块替换”的问题。当在存储中更改状态时,使用该存储的组件不会进行热更新。因为对我来说更改初始值对调试学习更直观一点。
但是在 Pinia store 中的更改不会自动反映,但如果我手动重新加载 vite 开发服务器(刷新),它们就能正常工作。
但是我们一般web开发中
Expected behavior
The state changes (and file is saved) = the preview changes.
状态变化(文件已保存)= 预览变化。
Actual behavior
The state chances, the preview doesn’t (until reloaded).
状态变化,预览不更新(直到重新加载)。
这就不符合历史惯性的开发直觉
无法使 HMR 与 Vite、Vue3 和 Pinia 协同工作?
HMR 无法工作 + 示例在 Safari 和 Chrome(M1)中也无法工作?
这里两个issue表述出:更新新状态时不应重置其他状态值,因此始终保留现有状态值。这也意味着您可以增加一个状态或者注释掉该行并保存(这将删除状态属性),然后取消注释并再次保存。就会刷新,但是问题的根本还是没有解决或者我像知道为什么?
pinia开发者表示
HMR Not Working, Even in Demo
这是预期的,因为状态已经存在。如果我们更改它,就会违背 HMR 的初衷,因为总是将您的状态重置为初始值。您可以在开发者工具中随时更改状态
至此就知道“原来pinia的HMR设计就已经如此了”。