javascript - TypeError: this.props.* 不是函数(即使有绑定)
问题描述
我不断收到以下错误:
TypeError:this.props.onDelete 不是函数
我在 render() 中的函数上有 .bind(this),但这个错误似乎一直在发生,我不知道为什么。以下是相关代码:
应用程序.js
import React, {Component} from 'react';
import Todos from './Components/Todos';
class App extends Component {
deleteTodo(id) {
let todos = this.state.todos;
for (let i = 0; i < todos.length; i++) {
if (todos[i].id === id) {
todos.splice(i, 1);
break;
}
}
this.state.todos = todos;
}
render() {
return (<div className="App">
<h1>React Todo App</h1>
<AddTodo/>
<Todos todos={this.state.todos} onDelete={this.deleteTodo.bind(this)}/>
</div>);
}
}
export default App;
Todos.js
import React, {Component} from 'react';
import Todo from './Todo';
class Todos extends Component {
delete(id) {
this.props.onDelete(id);
}
render() {
let todoItems = '';
if (this.props.todos) {
todoItems = this.props.todos.map(todo => {
return (<Todo id={todo.id} name={todo.name})></Todo>)
});
}
return (<ul class="todos" onDelete={this.props.onDelete.bind(this)}>{todoItems}</ul>);
}
}
export default Todos;
Todo.js
import React, {Component} from 'react';
class Todo extends Component {
delete(id) {
this.props.onDelete(id);
}
render() {
return (<li class="todo" id={this.props.id}>{this.props.name}
<a onClick={this.delete.bind(this, this.props.id)} class='remove-button' href='#'>X</a>
</li>)
}
}
export default Todo;
以下代码片段中的Todo.js似乎发生了错误:
delete(id) {
this.props.onDelete(id) // Error
}
编辑:为上下文添加了更多代码
解决方案
通过编写this.delete(this.props.id).bind(this)
,您正在调用您的this.delete
函数而不是提供onClick
函数引用。
你可以这样写:
onClick={this.delete.bind(this, this.props.id)}
或者使用箭头函数:
onClick={() => this.delete(this.props.id)}
推荐阅读
- c - 在 C 中打印结构成员变量以及确定 JSON 解析器的效率时,数据会损坏
- sql - 内连接doub
- python - 如何在 ListView Django 中过滤和分页
- angular - 类型“FacebookOriginal”不可分配给类型“Provider”(Ionic 5 - Facebook 离子原生)
- python-3.x - 为什么 DataFrame 没有被排序?
- node.js - npm 无法识别我的虚拟环境
- python - 我的 android 应用程序无法打开目录来读取文件
- python - 如何在 appium ( python ) 中的两个窗口之间切换
- r - 如何过滤栅格或仅在 R 中绘制某些栅格类别值?
- android - 如何在 Recyclerview 中管理多个视图?