javascript - 如何将键值对添加到状态对象 React

标签 javascript reactjs ecmascript-6

<分区>

我正在为在 React 中设置我的一个对象的状态而苦苦挣扎。我拥有的代码:

export class RRHN_App extends React.Component {
   constructor(props) {
      super(props);
      this.startLoadingItems();
      this.fetchData();
      this.state = {
         items: [],
         itemStatus : [],
         selectedItem: null,
         prefsDialog: false,
         preferences : {
             color : "brown",
             listSize : 800
         }
      }
   }
   toggleItem(item) {
      console.log("Selected item: ", item);
      if( this.state.selectedItem &&
          item.id === this.state.selectedItem.id) {
         this.setState({selectedItem: null});
      } else {
         let ItemID= item.id;
         let newSeen = {ItemID : "seen"};
         this.setState({selectedItem: item});
         this.setState({itemStatus: newSeen});
      }
      console.log(this.state.itemStatus)
   }
   fetchData() {
        request.get("http://localhost:3000/itemStatuses")
            .end( (err,response) => {
                this.setState({itemStatus: response.body})
            })
    }
   startLoadingItems() {
        request.get("http://localhost:3000/hn/topstories")
            .end( (err,response) => {
                this.setState({items : response.body})
            })
    }
}

当打印 itemStatus 时,我得到了这个:

{16490176: "seen", 16497964: "seen", 16514428: "read", 16542395: "read", 16566536: "read"}

执行代码时,itemStatus 如下所示:

{ItemID: "seen"}

如何将 item.id 和“seen”的键值对添加到状态?

最佳答案

除了 Rajesh 指出的动态键之外,还要注意 setState 将浅合并现有状态和新状态: 尝试

this.setState({[ItemId]: 'seen'})

关于javascript - 如何将键值对添加到状态对象 React,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49232538/

相关文章:

c# - 关于如何更新 DOM 但使用隐藏代码检查数据的问题

javascript - 通过 JavaScript 拦截对 DOM 的访问

javascript - Firefox 开发者工具中的 XHR 断点

javascript - 使用 let 变量而不是使用全局变量

javascript - 带解构的可选参数对象

Javascript:如何查找在长段落中选择了特定文本的哪个实例(例如,在段落中多次出现的单词)?

javascript - 将新属性添加到另一个数组中的现有对象数组

javascript - 使用父级回调函数时,this.setState 不会在子级中更新

reactjs - 正在调试 "react-redux"应用程序?

commonjs - 如何通过Webpack和6to5使用带有es6模块的npm包?