我在电子应用中使用Zustand和react。我正在使用它来从Dexie数据库中获取一些数据。这只是一个条目,它将其保存到声明。我正在尝试从渲染组件中获取集合功能,以便能够在状态下更改其各自属性的状态。在反应中,此代码有效...
setMyState({...appSettings, [val]: data})
但在zustand和我的状态看起来像这样,此代码不起作用
setAppSettings: (data: unknown, val: string) => {
set((state) => ({...state.appSettings, [val]: data}))
}
webstorm告诉我“类型的参数不可分配给类型的参数”。我将“数据”类型更改为任何类型,并且没有效果。当我运行此代码并单击按钮以更改它时,什么也不会发生,甚至没有错误。我确实将其更改为此代码,结果什么也没有发生。
setAppSettings: (data: any, val: string) => {
set((state) => ({
appSettings: {...state.appSettings, [val]: data}
}))
},
对于第二个代码,我在WebStorm中没有错误。因此,由于控制台没有给我任何东西,它的发生了什么。另外,该州似乎没有更新。我添加了一个可以安装的按钮。将整个“ appsettings'对象保持不变。我觉得这是一个简单的解决方案,但我一直在墙上敲打墙壁以弄清楚这一点...有人对此有任何了解吗?
在第一种情况下:
从基本上发生的事情是,您的状态有一些
type
,例如
RootState
,
AppState
或其他。
和
Webstorm is telling me "Argument of type is not assignable to parameter of type".
是什么意思是,当您拥有像typescript这样的setter时,无法将其投射到您所拥有的类型,因此它会抛出您[key]
[key:string]: any
添加到function
Argument of type is not assignable
基本上是由
as any
返回的对象应为data
有四周的方式,例如使用
setAppSettings: (data: unknown, val: string) => {
set((state) => ({...state.appSettings, [val]: data} as any))
}
或枚举...