Javascript 向数组添加对象的最佳实践

Javascript 向数组添加对象的最佳实践,javascript,Javascript,将对象添加到数组的最佳做法是什么。首先,您需要使用状态进行一些更正: this.state = { post: { question: '', img: '', postId: '', userId: '' }, feed: [], } 在未来,POST将是对象的数组,例如: this.state = { posts: [], feeds: [], } 使用this.setStat

将对象添加到数组的最佳做法是什么。

首先,您需要使用
状态进行一些更正:

    this.state = {
    post: {
        question: '',
        img: '',
        postId: '',
        userId: ''
      },
    feed: [],
  }
在未来,POST将是对象的
数组
,例如:

this.state = {
  posts: [],
  feeds: [],
}
使用
this.setState
向帖子中添加新帖子,同时请记住
状态是不可变的

this.state = {
  posts: [
   { postid: 1, question: "question" },
   { postid: 2, question: "question" }
  ]
}
有关
状态的详细信息

示例JSFiddle

类示例扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
员额:[],
提要:[],
}
}
getName=()=>{
常量名称=['1','2','3','4','5','6']
const random=Math.floor(Math.random()*names.length);
返回名称[随机]
};
getId=()=>Math.floor(Math.random()*(9999-1))+1;
makePost=()=>({id:this.getId(),name:this.getName()});
createPost=()=>{
这是我的国家({
//Rest操作符确保新对象具有合并的属性和值。
//需要“transform object rest spread”巴别塔插件
posts:[…this.state.posts,this.makePost()]
//或者像这样:this.state.posts.concat(this.makePost())
})
};
render(){
返回(
创建帖子
{JSON.stringify(this.state,null,2)}
);
}
}
ReactDOM.render(
,
document.getElementById('容器')
);

首先,您需要对
状态进行一些更正

    this.state = {
    post: {
        question: '',
        img: '',
        postId: '',
        userId: ''
      },
    feed: [],
  }
在未来,POST将是对象的
数组
,例如:

this.state = {
  posts: [],
  feeds: [],
}
使用
this.setState
向帖子中添加新帖子,同时请记住
状态是不可变的

this.state = {
  posts: [
   { postid: 1, question: "question" },
   { postid: 2, question: "question" }
  ]
}
有关
状态的详细信息

示例JSFiddle

类示例扩展了React.Component{
建造师(道具){
超级(道具);
此.state={
员额:[],
提要:[],
}
}
getName=()=>{
常量名称=['1','2','3','4','5','6']
const random=Math.floor(Math.random()*names.length);
返回名称[随机]
};
getId=()=>Math.floor(Math.random()*(9999-1))+1;
makePost=()=>({id:this.getId(),name:this.getName()});
createPost=()=>{
这是我的国家({
//Rest操作符确保新对象具有合并的属性和值。
//需要“transform object rest spread”巴别塔插件
posts:[…this.state.posts,this.makePost()]
//或者像这样:this.state.posts.concat(this.makePost())
})
};
render(){
返回(
创建帖子
{JSON.stringify(this.state,null,2)}
);
}
}
ReactDOM.render(
,
document.getElementById('容器')
);


First:post
必须是数组吗?第二:如果
post
数组中有多个项目,您如何决定更改
question
值的项目?每个帖子都有一个ID。这里似乎有一些可疑之处。如果
post
是一个post数组,则调用它
posts
,否则无需将其放入数组。其次,您正在使用
setState
这一事实告诉我,该状态是组件的内部状态,这里的更新不会发出任何类型的HTTP请求。如果是这种情况,您可能应该在此处使用另一个名为
Post
的组件来处理单个Post的状态,而不是尝试更新组件内状态数组。但是,如果您想这样做,则需要传递
postId
(甚至是索引)进入
handleChange
通知回调应该更新数组中的哪个帖子。你不能简单地执行
arrayName.push(对象)操作吗?首先:
post
必须是数组吗?第二:如果
post
数组中有多个项目,您如何决定更改
question
值的项目?每个帖子都有一个ID。这里似乎有一些可疑之处。如果
post
是一个post数组,则调用它
posts
,否则无需将其放入数组。其次,您正在使用
setState
这一事实告诉我,该状态是组件的内部状态,这里的更新不会发出任何类型的HTTP请求。如果是这种情况,您可能应该在此处使用另一个名为
Post
的组件来处理单个Post的状态,而不是尝试更新组件内状态数组。但是,如果您想这样做,则需要传递
postId
(甚至是索引)进入
handleChange
通知回调应该更新数组中的哪个帖子。你不能简单地执行
arrayName.push(对象)操作吗