Javascript React状态定义为属性深度克隆返回';未定义';

Javascript React状态定义为属性深度克隆返回';未定义';,javascript,reactjs,babeljs,Javascript,Reactjs,Babeljs,我正在尝试编写一个简单的ToDo应用程序 单击TodoItem应该从状态中删除一个项目,但是当我这样做时,我得到一个TypeError:this.state是未定义的。我不知道怎么了 我的代码如下所示: ----App.js---- 从“React”导入React; 从“/components/TodoItem”导入TodoItem; 类应用程序扩展了React.Component{ 状态={ 项目:{ 项目1:{文本:“Nazwa项目1”,isDone:false}, 项目2:{文本:“Naz

我正在尝试编写一个简单的ToDo应用程序

单击
TodoItem
应该从状态中删除一个项目,但是当我这样做时,我得到一个
TypeError:this.state是未定义的
。我不知道怎么了

我的代码如下所示:

----App.js----
从“React”导入React;
从“/components/TodoItem”导入TodoItem;
类应用程序扩展了React.Component{
状态={
项目:{
项目1:{文本:“Nazwa项目1”,isDone:false},
项目2:{文本:“Nazwa项目2”,isDone:false},
项目3:{文本:“Nazwa项目3”,isDone:false},
项目4:{文本:“Nazwa项目4”,isDone:false}
}
};
removeItem(键){
const items={…this.state.items};//类型错误:this.state未定义
控制台日志(项目);
}
render(){
返回(
    {Object.keys(this.state.items).map(key=>( ))}
); } } 导出默认应用程序;
----TodoItem.js----
从“React”导入React;
const TodoItem=道具=>{
返回(
  • props.removietem(props.index)}> {props.item.text} {props.item.isDone?“zrobione”:“niezrobione”}
  • ); }; 将默认值导出到doitem;
    问题在于
    绑定到您的函数,而不是类

    为了防止出现这种情况,您可以使用arrow函数将
    this
    绑定到类,或者调用
    .bind
    方法

    这将使它发挥作用:

     removeItem = (key) => {
        const items = { ...this.state.items };
        console.log(items);
      }
    
    或者:

    removeItem={this.removeItem.bind(this)}
    

    如果他们有正确的传输设置(他们可能会这样做),这里可能会有一个更大的问题。但是一个好的答案是它改变了什么,为什么,以及它是如何工作的。(并可能删除了希望现在出现的错误注释。)无论如何,这是一个opt重复,前面的答案很好地涵盖了这一点。更改为箭头函数解决了一个问题。@T.J.Crowder在这些方面我是个傻瓜:(
     removeItem = (key) => {
        const items = { ...this.state.items };
        console.log(items);
      }
    
    removeItem={this.removeItem.bind(this)}