问题描述
假如我们的state是一个对象{},因为setState做的是合并操作嘛,那么如果我想要删除state中的某个属性,我应该如何setState呢?
问题出现的环境背景及自己尝试过哪些方法
尝试过直接赋值,但是这样是不好的
假如我们的state是一个对象{},因为setState做的是合并操作嘛,那么如果我想要删除state中的某个属性,我应该如何setState呢?
尝试过直接赋值,但是这样是不好的
换个思路,删除了某个属性,也就是调用的时候回得到undefined。那你想删除哪个,就给哪个属性赋值undefined好了。
如果属性不多的话,可以在return的时候删除掉指定的属性。
const obj1 = {name:'xiaohong', age:'18', sex:'2', fav:'singing'}
const obj2 = {school:'tsinghua', face: 'beautiful'}
return { ...obj1, ...obj2 }; //一般合并操作
return { ...obj1, obj2.school }; //删除face属性
试试好不好用吧,不过常规的做法还是赋值undefined。
最简单的情况,用delete
运算符:(注意: 赋值null
或undefined
还是会看到值在属性上)
let newState = this.state
delete newState[keyname]
this.setState({ newState })
复杂一点的情况,用omit或omitDeep,示例:
this.state = {
hasValue: false,
data: {
user: 'Bing Bing',
foo: 123,
bar: '111',
},
}
handleChangeStateByOmit = () => {
const newState = {
data: _.omit(this.state.data, ['user', 'bar']),
}
this.setState(newState, () => {
console.log(this.state)
})
}
6 回答2.4k 阅读
3 回答2.1k 阅读✓ 已解决
2 回答2.1k 阅读✓ 已解决
3 回答1.8k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.7k 阅读✓ 已解决
2 回答1.9k 阅读✓ 已解决