是否有可能用更新对象的属性setState
?
就像是:
this.state = {
jasper: { name: 'jasper', age: 28 },
}
我努力了:
this.setState({jasper.name: 'someOtherName'});
还有这个:
this.setState({jasper: {name: 'someothername'}})
第一个导致语法错误,第二个则什么都不做。有任何想法吗?
有多种方法可以执行此操作,因为状态更新是异步操作,因此要更新状态对象,我们需要使用带有updater函数setState
。
1-最简单的一个:
首先创建的副本,jasper
然后执行以下更改:
this.setState(prevState => {
let jasper = Object.assign({}, prevState.jasper); // creating copy of state variable jasper
jasper.name = 'someothername'; // update the name property, assign a new value
return { jasper }; // return new object jasper object
})
除了使用,Object.assign
我们还可以这样写:
let jasper = { ...prevState.jasper };
2-使用 扩展运算符:
this.setState(prevState => ({
jasper: { // object that we want to update
...prevState.jasper, // keep all other key-value pairs
name: 'something' // update the value of specific key
}
}))
注意: Object.assign
并且Spread Operator
仅创建浅表副本,因此,如果您定义了嵌套对象或对象数组,则需要使用其他方法。
假设您已将状态定义为:
this.state = {
food: {
sandwich: {
capsicum: true,
crackers: true,
mayonnaise: true
},
pizza: {
jalapeno: true,
extraCheese: false
}
}
}
要更新披萨对象的ExtraCheese:
this.setState(prevState => ({
food: {
...prevState.food, // copy all other key-value pairs of food object
pizza: { // specific object of food object
...prevState.food.pizza, // copy all pizza key-value pairs
extraCheese: true // update value of specific key
}
}
}))
假设您有一个待办事项应用程序,并且您正在以这种形式管理数据:
this.state = {
todoItems: [
{
name: 'Learn React Basics',
status: 'pending'
}, {
name: 'Check Codebase',
status: 'pending'
}
]
}
要更新任何待办事项对象的状态,请在数组上运行一个映射并检查每个对象的某些唯一值,如果为condition=true
,则返回具有更新值的新对象,否则返回相同的对象。
let key = 2;
this.setState(prevState => ({
todoItems: prevState.todoItems.map(
el => el.key === key? { ...el, status: 'done' }: el
)
}))
建议: 如果对象没有唯一值,则使用数组索引。
是否可以使用更新对象的属性? 类似于: 我试过: 还有这个: 第一个会导致语法错误,而第二个则什么也不做。有什么想法吗?
是否可以使用setState更新对象的属性? 比如: 我可以使用以下方式将事件记录到控制台:- 我在控制台上创建的solidity ABI对象是 我需要设置所需的数据,并在以后使用它,所以我使用.setState如下 但是它显示. setState不是一个函数。请帮帮我。
我正在尝试使用DidMount中的localStorage值更新状态,但它没有更新: 在第一个console.log中,我的值为1,在第二个中,它保持为空,不更新状态。
所以我有这个: 只是一个数组的数字例如然而没有给出正确的总数,但?我甚至放了一个超时延迟,看看这是否解决了问题。任何明显的还是我应该发布更多的代码?
我正在创建一个应用程序,用户可以在其中设计自己的表单。例如。指定字段的名称以及应包括的其他列的详细信息。 该组件在这里可以作为JSFiddle使用。 我最初的状态是这样的: 如何创建以使其更新?
我试图在if语句中设置状态,但它不会这样做。结果,我需要从if语句中更新状态,在那个里我可以接收经度和纬度坐标,但它不会保存状态。若我在If语句之外的控制台中回显,我将只读取第一个setState值表单componentWillMount。有什么问题吗?我做错了什么?结构如下: