react setState

更改state 中的对象

 const [person, setPerson] = useState({
    firstName: 'Barbara',
    lastName: 'Hepworth',
    email: 'bhepworth@sculpture.com'
  });

修改:

setPerson({

        ...person, // 复制上一个 person 中的所有字段

        firstName: e.target.value // 但是覆盖 firstName 字段

});

更新一个嵌套象

const [person, setPerson] = useState({

        name: 'Niki de Saint Phalle',

        artwork: {

                title: 'Blue Nana',

                city: 'Hamburg',

                image: 'https://i.imgur.com/Sd1AgUOm.jpg',

        }

});

修改

setPerson({

...person, // 复制其它字段的数据

artwork: { // 替换 artwork 字段

...person.artwork, // 复制之前 person.artwork 中的数据

city: 'New Delhi' // 但是将 city 的值替换为 New Delhi!

}

});

使用immer 编写更简单的逻辑

import { useImmer } from 'use-immer';


  const [person, updatePerson] = useImmer({
    name: 'Niki de Saint Phalle',
    artwork: {
      title: 'Blue Nana',
      city: 'Hamburg',
      image: 'https://i.imgur.com/Sd1AgUOm.jpg',
    }
  });

修改

function handleNameChange(e) {
    updatePerson(draft => {
      draft.name = e.target.value;
    });
  }

function handleTitleChange(e) {
    updatePerson(draft => {
      draft.artwork.title = e.target.value;
    });
  }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值