javascript - react Hook : How do I update state on a nested object with useState()?

标签 javascript reactjs destructuring

我有一个接收如下 prop 的组件:

const styles = {
    font: {
        size: {
            value: '22',
            unit: 'px'
        },
        weight: 'bold',
        color: '#663300',
        family: 'arial',
        align: 'center'
    }
};

我正在尝试更新 align 属性,但是当我尝试更新对象时,我最终仅用 align 属性替换整个对象。

这就是我更新它的方式:

const { ...styling } = styles;
const [style, setStyle] = useState(styling);

return (
        <RadioButtonGroup
            onChange={(event) => {
                setStyle({ ...style, font: { align: event.target.value } });
                console.log(style);
            }}
        />);

当我 console.log style 时,我只是得到 {"font":{"align":"left"}} 回来。 我希望看到整个对象的 align 值已更新。我是解构新手,所以我在这里做错了什么?

最佳答案

您还需要使用扩展语法来复制字体对象属性。另外,在尝试根据先前状态更新当前状态时,请使用回调模式

<RadioButtonGroup
  onChange={(event) => { 
    setStyle(prevStyle => ({
        ...prevStyle,
        font: { ...prevStyle.font, align: event.target.value }
    }));
    console.log(style);
  }}
/>

关于javascript - react Hook : How do I update state on a nested object with useState()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56802815/

相关文章:

javascript - React 自定义组件未按预期呈现

javascript - 是否可以使用 Graphql 生成的模式作为流定义?

javascript - Testcafe 无法识别 React

reactjs - 解构 props 分配

php - 多个文件同时访问Session

javascript - Webpack 通天塔 6

php - Uploadify:写入完成但没有上传文件

javascript - 增加Target Box并从jquery-sortable获取Image信息

javascript - 条件(动态)解构

javascript - 这个 es6 赋值运算符是什么?