Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 即使使用“删除”操作符,对象属性也不会被删除_Javascript_Reactjs - Fatal编程技术网

Javascript 即使使用“删除”操作符,对象属性也不会被删除

Javascript 即使使用“删除”操作符,对象属性也不会被删除,javascript,reactjs,Javascript,Reactjs,我有一个对象数组。我想从中删除一个名为id的键。 我使用以下代码将其从对象中删除 this.state.result.forEach(item => delete item.id); 但是,id并没有从中删除。我不知道为什么,我的代码有什么问题。我尝试使用上述逻辑删除同一对象中的其他几个键,效果很好。我面临的唯一问题是id 我认为这个对象属性是不可配置的。如果是的话,我们如何删除它呢 谁能帮我一下吗。提前感谢。可能id是不可配置的,那么您不能删除它。 . 请注意,TypeError仅在严

我有一个对象数组。我想从中删除一个名为
id
的键。 我使用以下代码将其从对象中删除

this.state.result.forEach(item => delete item.id);
但是,id并没有从中删除。我不知道为什么,我的代码有什么问题。我尝试使用上述逻辑删除同一对象中的其他几个键,效果很好。我面临的唯一问题是
id

我认为这个对象属性是不可配置的。如果是的话,我们如何删除它呢


谁能帮我一下吗。提前感谢。

可能
id
不可配置的
,那么您不能删除它。
. 请注意,
TypeError
仅在严格模式下抛出。

在React.js中,您不应尝试直接改变状态。查看官方文件中的文章。必须使用setState()才能获得结果。未删除id,因为未进行重新渲染

从文件来看

不要直接修改状态

相反,请使用setState():


在React中,您不能直接更新
状态
。您必须始终使用
setState
方法来执行此操作

所以试试这个

this.setState({
 result: this.state.result.map(item => {
  let tmpItem = {...item};
  delete tmpItem.id;
  return {...tmpItem}; 
 })
});
谢谢

**

如果您使用的是react,则应始终使用setState 改变状态

**

解释@Prabu答案

    this.setState({ // calling setState for updating the state
       result: this.state.result.map(item => {
           let tmpItem = {...item};// storing all the value here in tmpItem
           delete tmpItem.id; // deleting the key
           return {...tmpItem}; // returning here
       })
    }, ()=> {
        // for immediatly accessing the state you can use callback
    });

在计算下一个状态时,千万不要依赖于
状态
:s值,因为它可能会在后台进行异步更新

另外,尽量避免
delete
,因为这是性能杀手

因此,请尝试以下方法:

this.setState((state, props) => ({
  result: state.result.map(({id, ...propsToKeep}) => propsToKeep)
}));
或者如果必须使用
删除

this.setState((state, props) => ({
  result: state.result.map(res => { 
    delete res.id; 
    return res; 
  });
}));

你在用react吗?很明显,您试图直接改变状态,而不是在react中更新状态的方式。仍然没有删除id。我甚至尝试将状态变量存储在局部变量中,并从中删除id。但同样的问题。请考虑创建一个可重复的代码示例,如用户所指出的,这将有助于调试。扩展运算符对我不起作用。它给出了意外的令牌错误。我已通过以下方式安装了它:。我仍然面临着同样的问题。我提到了关于stackoverflow的几个答案,包括。但是没有任何帮助。除了使用spread运算符,我们可以使用其他解决方案来解决我的问题吗?但它并没有删除id!!此处的id似乎不可配置。。
this.setState((state, props) => ({
  result: state.result.map(({id, ...propsToKeep}) => propsToKeep)
}));
this.setState((state, props) => ({
  result: state.result.map(res => { 
    delete res.id; 
    return res; 
  });
}));