Javascript 按对象Id更新状态数组

Javascript 按对象Id更新状态数组,javascript,reactjs,Javascript,Reactjs,我想按特定id更新状态数组对象 假设我有以下对象处于状态。我试着用id按照下面的方式更新,但它对我不起作用 它没有更新状态数据 this.state={ 数据:[{id:'124',名称:'qqq'}, {id:'589',name:'www'}, {id:'45',name:'eee'}, {id:'567',name:'rrr'}] } publishCurrentProject=用户=>{ this.setState(prevState=>({ 数据:prevState.data.map

我想按特定id更新状态数组对象

假设我有以下对象处于状态。我试着用id按照下面的方式更新,但它对我不起作用

它没有更新状态数据

this.state={
数据:[{id:'124',名称:'qqq'},
{id:'589',name:'www'},
{id:'45',name:'eee'},
{id:'567',name:'rrr'}]
}
publishCurrentProject=用户=>{
this.setState(prevState=>({
数据:prevState.data.map(项=>
item.id==user.id?{…user}:item
),
}))
}
let user={id:'124',name:'ttt'};

publishCurrentProject(用户)可能问题在于如何调用
publishCurrentProject()
,可能您将该函数放在了错误的上下文中。我使用您的实现,它仍然有效

export default class App extends React.Component {
  constructor(props) {
    super(props);
    this.state = {
      data: [
        { id: "124", name: "qqq" },
        { id: "589", name: "www" },
        { id: "45", name: "eee" },
        { id: "567", name: "rrr" }
      ]
    };

    this.handleClick = this.handleClick.bind(this);
    this.publishCurrentProject = this.publishCurrentProject.bind(this);
  }

  handleClick(e) {
    let user = { id: "124", name: "ttt" };

    this.publishCurrentProject(user);
  }

  publishCurrentProject(user) {
    this.setState((prevState) => ({
      data: prevState.data.map((item) =>
        item.id === user.id ? { ...user } : item
      )
    }));
  }

  render() {
    return (
      <div className="App">
        <h1>Test</h1>
        {this.state.data.map((el) => (
          <p>{el.name}</p>
        ))}
        <button onClick={this.handleClick}>Change</button>
      </div>
    );
  }
}
导出默认类App扩展React.Component{
建造师(道具){
超级(道具);
此.state={
数据:[
{id:“124”,姓名:“qqq”},
{id:“589”,姓名:“www”},
{id:“45”,名字:“eee”},
{id:“567”,名称:“rrr”}
]
};
this.handleClick=this.handleClick.bind(this);
this.publishCurrentProject=this.publishCurrentProject.bind(this);
}
handleClick(e){
let user={id:“124”,name:“ttt”};
此.publishCurrentProject(用户);
}
publishCurrentProject(用户){
this.setState((prevState)=>({
数据:prevState.data.map((项)=>
item.id==user.id?{…user}:item
)
}));
}
render(){
返回(
试验
{this.state.data.map((el)=>(
{el.name}

))} 改变 ); } }
工作示例的Codesandbox


什么不起作用?到底发生了什么?您如何以及在何处使用此代码?请包含一个。@EmileBergeron它没有更新状态数据。您是如何确认状态没有更新的?几秒钟后我检查了状态数据。请再次包含一个演示您所说内容的。
publishCurrentProject
是一个arrow函数类属性,因此,它自动拥有组件的上下文,而无需使用
bind
或其他技巧。