我正在按照这个教程制作一个简单的todo应用程序(https://hackernoon.com/create-a-simple-todo-app-in-react-9bd29054566b)。
问题是我遇到了这个错误:
TypeError: _this is undefined
在下面的组件中引用我使用onClick删除时:
import React, {Component} from 'react'
class TodoItems extends Component {
createTasks(item) {
return (
<li key={item.key} onClick={() => this.props.deleteItem(item.key)}>
{item.text}
</li>
)
}
render() {
const todoEntries = this.props.entries
const listItems = todoEntries.map(this.createTasks)
return <ul className="theList">{listItems}</ul>
}
}
export default TodoItems
我看到我可能要用。在构造函数中绑定(this),但我不确定如何在这里应用它。
这是App的部分。js,其中定义了deleteItem并调用TodoItems:
deleteItem = key => {
const filteredItems = this.state.items.filter(item => {
return item.key !== key
})
this.setState({
items: filteredItems,
})
}
inputElement = React.createRef()
render() {
return (
<div className="App">
<TodoList
addItem={this.addItem}
inputElement={this.inputElement}
handleInput={this.handleInput}
currentItem={this.state.currentItem}
/>
<TodoItems entries={this.state.items} deleteItem={this.deleteItem}/>
</div> //App
)
}
提前感谢任何帮助!
5条答案
按热度按时间f45qwnt81#
如果你不知道为什么。..
类声明和类表达式的主体以严格模式执行,即构造函数、静态和原型方法。Getter和setter函数在严格模式下执行。
在React中的类组件中,当我们像这样将事件处理函数引用作为回调传递时
单击“我”,事件处理程序方法将丢失其隐式绑定的上下文。当事件发生并调用处理程序时,this值福尔斯退到默认绑定并设置为undefined,因为类声明和原型方法以严格模式运行。
当我们将事件处理程序的this绑定到构造函数中的组件示例时,我们可以将其作为回调传递,而不用担心它会丢失上下文。
箭头函数不受此行为的影响,因为它们使用词法this绑定,自动将它们绑定到定义它们的范围。
This is why we need to bind event handlers in Class Components in React
Class MDN
ux6nzvsh2#
您可以使用胖箭头功能
支持ES6。
或
你也可以。在构造函数中绑定(this)。
例
qgelzfjb3#
this.createTasks
方法用作回调。它应该绑定到适当的上下文,以便使用this
。它应该是:
或者
ki1q1bka4#
您可以使用ES6,通过适当的Babel配置使其更简单,并消除对
constructor()
周期的需求。遵循此tutorial.0lvr5msh5#
这里的文档是为那些可能像我一样使用Redux的人准备的,他们通过引用
this
错误地设置了一个reducer字段。像这样的-this.action.payload
中的this
是我的罪魁祸首。容易错过和模糊的调试。