在 react-native 中更新对象的状态 - 我没有使用 redux
update state of an object in react-native - I am not using redux
我有一个像
这样的构造器
constructor() {
this.state = {
item_details : {}
}
}
someFunc(next_item_key,next_item_value) {
//append this next_item_key , next_item_value pair to item_detials
}
我需要将 someFunc 中的 next_item 添加到我的状态变量 item_details..
示例:
我的 item_details 看起来像这样
item_details : {'abc' : 'xyz' , 'a12' : '123' }
我的next_item会像
next_item_key = 'qwerty'
next_item_value = 'pqrs'
我的结果 item_details 应该看起来像
item_details : {'abc' : 'xyz' , 'a12' : '123' , 'qwerty' : 'pqrs' }
我应该在 someFunc 中写什么才能得到这个结果
您可以使用扩展运算符来保持您之前的状态:
this.setState(prevState => ({ item_details:
{
...prevState.item_details,
[next_item_key]: next_item_value
}
}));
使用 [] notation and spread operator 来实现。
这样写:
someFunc(next_item_key, next_item_value) {
this.setState(prevState => ({item_details: {
...prevState.item_details,
[next_item_key]: next_item_value}
}))
}
更新:
在循环中调用 setState 不是一个好主意,更好的方法是先进行所有计算,然后在拍摄时更新状态值。
像这样:
let data = {};
response.result.variants.forEach((element) => {
data[element.title]: false;
});
this.setState(prevState => ({in_wishlist: { ...prevState.in_wishlist, ...data }}))
Object.assign 应该符合您的需要:
const newState = Object.assign(this.state.item_details, {[next_item_key]: next_item_value})
或使用扩展运算符:
const newState = {...this.state.itemDetails, [next_item_key]: next_item_value}
我有一个像
这样的构造器constructor() {
this.state = {
item_details : {}
}
}
someFunc(next_item_key,next_item_value) {
//append this next_item_key , next_item_value pair to item_detials
}
我需要将 someFunc 中的 next_item 添加到我的状态变量 item_details..
示例: 我的 item_details 看起来像这样
item_details : {'abc' : 'xyz' , 'a12' : '123' }
我的next_item会像
next_item_key = 'qwerty'
next_item_value = 'pqrs'
我的结果 item_details 应该看起来像
item_details : {'abc' : 'xyz' , 'a12' : '123' , 'qwerty' : 'pqrs' }
我应该在 someFunc 中写什么才能得到这个结果
您可以使用扩展运算符来保持您之前的状态:
this.setState(prevState => ({ item_details:
{
...prevState.item_details,
[next_item_key]: next_item_value
}
}));
使用 [] notation and spread operator 来实现。
这样写:
someFunc(next_item_key, next_item_value) {
this.setState(prevState => ({item_details: {
...prevState.item_details,
[next_item_key]: next_item_value}
}))
}
更新:
在循环中调用 setState 不是一个好主意,更好的方法是先进行所有计算,然后在拍摄时更新状态值。
像这样:
let data = {};
response.result.variants.forEach((element) => {
data[element.title]: false;
});
this.setState(prevState => ({in_wishlist: { ...prevState.in_wishlist, ...data }}))
Object.assign 应该符合您的需要:
const newState = Object.assign(this.state.item_details, {[next_item_key]: next_item_value})
或使用扩展运算符:
const newState = {...this.state.itemDetails, [next_item_key]: next_item_value}