function - React Native ArrowFunction 针对正常功能(Appstate)
问题描述
我试图找出两个函数之间的区别。在我的 react native 应用程序中,我使用 AppState eventlistener 来检查应用程序是在后台还是前台运行(请参见下面的代码):
AppState.addEventListener('change', this._handleAppStateChange);
该函数如下所示:
_handleAppStateChange = (nextAppState) => {
console.log('nextAppState', nextAppState)
this.setState({
appState: nextAppState
});
};
我不喜欢 te 函数的制作方式,因为在侦听器中调用它时不带参数,但函数本身有参数。所以我想改变它以使其更清楚。这是制作的:
_handleAppStateChange (nextAppState) {
console.log('nextAppState', nextAppState)
this.setState({
appState: nextAppState
});
};
这工作正常,nextAppState 仍然被记录,但 setstate 不再工作,说它不是一个函数。有人可以解释我为什么吗?
有人能解释一下这两种功能中哪一种最好用吗?
多谢!
解决方案
开始使用箭头函数,创建箭头函数的原因之一是针对您提到的问题,即this
在函数上下文中丢失。
因此,为了使您的功能正常工作,您需要将功能绑定到this
. 在你的构造函数中添加这一行
this._handleAppStateChange = this._handleAppStateChange.bind(this)
或者您可以替换此功能
AppState.addEventListener('change', this._handleAppStateChange);
至
AppState.addEventListener('change', (nextAppState) => this._handleAppStateChange(nextAppState));
奖金。如果您需要传递除了 nextAppState 或状态之外的额外参数。这条线行不通
AppState.addEventListener('change', (nextAppState, this.state.someRandmValue) => this._handleAppStateChange(nextAppState, this.state.someRandmValue));
由于 this.state.someRandomValue 是未定义的,因为 handleAppState 不会发出这个值,而是使用这个
AppState.addEventListener('change', (nextAppState) => this._handleAppStateChange(nextAppState, this.state.someRandmValue));
推荐阅读
- c# - 将列表从一个类转换为另一个类
- sql - 从与另一列的最大值关联的列中返回一个值
- php - 如何使用 composer 将我的 github 项目安装到根目录?
- javascript - snapshotChanges() 多次流式传输
- mapbox - 无法选择 Mapbox ID 图层
- android - 插入新行时,Android Room FOREIGN KEY 约束失败(代码 787)
- c# - 这是 WPF 的 SaveFileDialog.FileName 中真正需要的行为吗?
- reactjs - 将元素推送到存储在会话存储中的现有数组
- python - 生成正态分布样本
- logstash - Logstash 日期解析不同