javascript - React 组件内的递归函数 TypeError: * is not a function
问题描述
我正在尝试在 React 组件中编写递归函数,但是当我调用它时出现错误:
TypeError: this.loadFromStorage is not a function
这是我的代码:
class Availability extends Component {
state = { availability: [] }
componentDidMount() {
this.getAvailability();
}
loadFromStorage = () => {
let data = sessionStorage.getItem(this.props.manufacturer);
if(data) {
let availability = JSON.parse(data);
this.setState({availability});
} else {
setTimeout(function() { this.loadFromStorage(); }, 200);
}
}
getAvailability = () => {
// calls this.loadFromStorage()
...
解决方案
似乎问题是,您没有使用箭头函数进行回调
setTimeout(function() { this.loadFromStorage(); }, 200);
应该
setTimeout(() => this.loadFromStorage(), 200);
因为匿名函数默认情况下总是全局(窗口)。虽然箭头函数总是从声明的地方使用 this (所以在这种情况下它将是你的组件),对于 loadFromStorage 本身也是如此,它是箭头函数,在内部它在构造函数内部运行,在实际构造函数代码之前。
推荐阅读
- c# - 使用任务与使用线程进行任务监控
- r - 在R中的特定列中选择所有或少于n个NA的行
- api - 在空手道中,如何从另一个请求中的一个请求发送响应 cookie
- pyspark - 在函数中保存 pyspark 数据框
- entity-framework-core - 指定 ON DELETE NO ACTION 或 ON UPDATE NO ACTION,或修改其他 FOREIGN KEY 约束
- mongodb - 通过 Mongo Compass 直接连接到数据库
- ios - iOS13 AVAssetExportSession 错误试图减少设备上的视频大小但不是模拟器
- python - 填充多条曲线和直线之间的区域
- authentication - 无法从 Dialogflow 意图处理程序进行 APEX Web 服务标注
- r - 如何在 R Shiny 中触发具有不同输入类型的观察事件和动作?