如何在嵌套对象中设置状态



想知道是否有办法使用useState((更新 React 中的嵌套对象状态

import React, {useState} from 'react'
const MyComp = () => {
const [colors, setColors] = useState({colorA: 'RED', colorB: 'PURPLE'});
return (
<div>
<span>{colors.colorB}</span>
<button onClick={() => setColors({...colors, colors: { colorB: 'WHITE'}})}>CLICK ME</button>
</div>
)
}

export default MyComp;

我想使用useReducer((,但我读到它通常用于更复杂的状态,也许在这种情况下使用useState((有一个解决方案。

有什么想法吗?

提前感谢

colors已经是整个对象,则无需声明为属性。

spread原始对象并覆盖colorB

() => setColors({...colors, colorB: 'WHITE'}) 

您以错误的方式更新状态。将您的按钮语句更改为下面,

<button onClick={() => setColors({...colors, colorB: 'WHITE'})}>CLICK ME</button>

使用

setColors({...colors, colorB: 'WHITE'})

而不是

setColors({...colors, colors: { colorB: 'WHITE'}})

为此最好使用函数形式的setState,因为下一个状态值取决于状态的当前值:

return (
<div>
<span>{colors.colorB}</span>
<button
onClick={() => setColors(currentColors => ({ ...currentColors, colorB: "WHITE" }))}
>
CLICK ME
</button>
</div>
);

由于您已经完成了点差,它将具有属性colorB,您只需要使用新值进行更新即可

const handleButtonClick = () => {
setColors({ ...colors, colorB: "WHITE" });
};

将其转换为函数将更具可读性。

法典

import React, { useState } from "react";
import ReactDOM from "react-dom";
const MyComp = () => {
const [colors, setColors] = useState({ colorA: "RED", colorB: "PURPLE" });
const handleButtonClick = () => {
setColors({ ...colors, colorB: "WHITE" });
};
return (
<div>
<span>{colors.colorB}</span>
<button onClick={handleButtonClick}>CLICK ME</button>
</div>
);
};
export default MyComp;
const rootElement = document.getElementById("root");
ReactDOM.render(<MyComp />, rootElement);

工作代码笔

语句中存在一个小语法错误

const App = () => {

const [colors, setColors] = useState({ colorA: 'RED', colorB: 'PURPLE' });
return (
<div>
<span>{colors.colorB}</span>
<button onClick={
() =>
setColors(
{ ...colors,colorB: 'WHITE' }
)
}>CLICK ME</button>
</div>
)
}

相关内容

  • 没有找到相关文章

最新更新