直接更新 useState 对象键? [复制]

Posted

技术标签:

【中文标题】直接更新 useState 对象键? [复制]【英文标题】:Update useState Object Key Directly? [duplicate] 【发布时间】:2020-04-07 01:29:18 【问题描述】:

我想将 comment 的键值更新为新值,同时保持其他键不变。我知道我可能需要扩展运算符......但我不确定确切的语法。我需要在 setResource() 中添加什么来完成此操作?

const VideoPage = () => 
  const [state, setResource] = useState(
    
      video: 'placeholder'
      loading: 'placeholder'
      comment: 'placeholder'
    
  )
  const funct = () => 
    setResource()
  

【问题讨论】:

【参考方案1】:

如果你想保留状态的其他部分,你应该这样做:

setResource(prevState => (
    ...prevState,
    comment: "new Value",
))

由于您的状态的 setter 函数不会像旧的 setState 方法那样合并其他值。这就是为什么你应该做一个functional update。

【讨论】:

一开始没有注意到你的链接。我会读一读。 @devserkan 如果我想更新两个值 1) 视频和 2) 评论,那么我是否也需要为视频编写两次相同的代码? @cakephp,您可以使用相同的代码更新video。只需添加属性和新值。【参考方案2】:

按原样传播您的对象,然后更新您所需的值。

const VideoPage = () => 
  const [state, setResource] = useState(
    
      video: 'placeholder'
      loading: 'placeholder'
      comment: 'placeholder'
    
  )
  const funct = () => 
    setResource(...state, comment:'Hello')
  

【讨论】:

我不太确定直接传播当前状态是否正确。归根结底,我们正在使用当前状态并使用新值对其进行更新。使用功能更新可能是一个更好的主意。

以上是关于直接更新 useState 对象键? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

在 useState 中保存的数组中包含的一系列对象中增加键的值 (+1)

使用 prevState 和 useState 钩子更新对象内部数组中的对象

useState 是同步的吗? [复制]

如何在对象数组中使用 usestate 更新状态?

如何在对象数组中使用 usestate 更新状态?

使用 React useState() 钩子更新和合并状态对象