reactjs - Reactjs 内存泄漏 - 内联函数与绑定柯里化函数
问题描述
我和一位同事正在讨论渲染调用中导致内存泄漏的内联函数。我建议我们绑定一个柯里化函数,但他认为它会产生相同的效果。这是真的?由于每次渲染调用都会创建一个新函数,currying 会产生内存泄漏吗?
有没有更好的方法来使用不会导致内存泄漏的柯里化?
对那些提供关于这个主题的好阅读材料的人表示额外的荣誉。
简单示例演示了所讨论的两种方法。
export default class ParentComponent extends Component {
constructor(props) {
super(props);
this.state = {
memLeak: false,
};
this.curryExample = this.curryExample.bind(this);
}
curryExample(bool) {
return () => {
this.setState({memLeak: bool})
};
}
render() {
const {memLeak} = this.state;
return (
<div>
{/* inline func leads to memory leaks */}
<ChildComponent onClick={() => this.setState({memLeak: !memLeak})}/>
{/* but does a bound function to Parent scope do the same?? */}
<ChildComponent onClick={this.curryExample(!memLeak)}/>
</div>
);
}
}
解决方案
我在上面找到了React关于“内存泄漏”问题的讨论。
事实证明,它们本身并不是内存泄漏。在DEV中创建了额外的事件处理程序,最终得到垃圾收集。因此,更多的 GC 在 dev 中运行,但不会导致最终导致应用程序停止的内存泄漏。
所以 - 这个讨论是一个有争议的问题。干杯!
推荐阅读
- c# - 以用户身份运行时,OpenFileById 获取 System.AccessViolationException(以管理员身份运行)
- python - 没有列参数的 df.repartition 对什么进行分区?
- php - jquery循环槽数组,typeError未定义
- string - Ansible:意外的模板类型错误:预期的字符串或缓冲区
- c# - C# 8 - 多重继承“抽象类”?
- sql - 强制 sqlite 选择查询不返回任何内容而不是 null
- javascript - 将脚本添加到部分内的 javascripts 块
- ios - 在 UILabel (Swift 4) 中显示来自解码 JSON 的信息
- wagtail - 有没有一种简单的方法可以将复制按钮添加到 wagtail 中非页面模型的 IndexListing 中?
- c# - 迭代不断修改的 List