在 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}