zustand状态函数要更改对象的一个属性

问题描述 投票:0回答:1

我在电子应用中使用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'对象保持不变。
我觉得这是一个简单的解决方案,但我一直在墙上敲打墙壁以弄清楚这一点...有人对此有任何了解吗?

在第一种情况下:

reactjs typescript electron zustand
1个回答
0
投票

从基本上发生的事情是,您的状态有一些

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)) }

或枚举...
    

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.