Javascript 为什么将componentDidMount更改为非箭头功能会使热重新加载再次工作?

Javascript 为什么将componentDidMount更改为非箭头功能会使热重新加载再次工作?,javascript,reactjs,react-native,reloading,hot-reload,Javascript,Reactjs,React Native,Reloading,Hot Reload,在我的React原生应用程序的一个屏幕上,热重新加载不起作用。我发现解决办法就是改变这个 componentDidMount = () => { <...do stuff with this.props...> } componentDidMount=()=>{ } 对此 componentDidMount() { <...do stuff with this.props...> } componentDidMount(){ } 所以我所做的就是将c

在我的React原生应用程序的一个屏幕上,热重新加载不起作用。我发现解决办法就是改变这个

componentDidMount = () => {
  <...do stuff with this.props...>
}
componentDidMount=()=>{
}
对此

componentDidMount() {
  <...do stuff with this.props...>
}
componentDidMount(){
}
所以我所做的就是将componentDidMount从箭头函数更改为非箭头函数。所以我的问题是:

为什么将其更改为非箭头功能会使热重新加载再次工作?我知道,将其设为非箭头函数意味着,如果函数是从其他上下文调用的,
this
的值将重新绑定到调用该函数的上下文,而对于箭头函数,它将始终绑定到定义它的组件。但这如何影响热重新加载?热重新加载是否会导致从不同的上下文调用
componentDidMount
,并重新绑定
this
?如果是,这将如何影响热重新加载

谢谢

更新

一些用户询问这是否是()或()的副本


这不是其中任何一个的副本。请注意,我确实概述了箭头函数和非箭头函数之间的区别。我的问题是这些差异如何具体应用于热重新加载。

我认为当一个方法被声明为

componentDidMount () {
   <... do stuff with this.props ...>
}
componentDidMount = () => {
   <... do stuff with this.props ...>
}
componentDidMount(){
   
}
它使解释器能够优化代码,因为它是一个类方法——它不属于类本身,但它不会随着对象的变化而变化

ie有一个类别a和方法b——在类别a的所有实例中,方法b都是相同的,优化器可以看到并优化它

当方法声明为

componentDidMount () {
   <... do stuff with this.props ...>
}
componentDidMount = () => {
   <... do stuff with this.props ...>
}
componentDidMount=()=>{
   
}

它实际上为每个实例a创建了一个方法,因此优化器看到了不同的方法b,无法优化@ponury kostek和JosepJoestar的可能重复项的可能重复项。这不是重复项。我知道arrow函数和非arrow函数之间的区别,我只是想了解这种区别是如何应用于热重新加载的:)相关:React会小心地将生命周期方法正确绑定到它们所定义的实例上,因此您不必手动(通常)执行此操作。感谢您的洞察力,我不知道^^,所以我仍然想知道为什么使用arrow函数语法会导致热重新加载不起作用。有什么想法吗?一开始我认为有一个滚动包装器来保存状态,组件will/DidMount在更新时根本不会启动,因为wrraper上没有更新,但是如果你说你没有箭头,我认为缓存有问题-因为箭头函数是一个新函数,它返回原始的更正一个,然后更改非常原始的函数,但不更改返回原始值的箭头-因此该函数被视为相等,缓存取消更新代码