对React的事件监听器中的内存泄漏的担忧

时间:2019-05-14 00:07:10

标签: reactjs memory-leaks

反应会照顾事件侦听器并在状态更改时将其删除吗? 看下面的代码,我在onClick中使用了HtmlElement。状态更改时,可以删除元素本身。会清理事件监听器还是每次删除用户时都要自己清理每个监听器?

class Users extends React.Component {
  constructor(props) {
    super(props);
    this.state = { data: this.props.data };
  }
  remove = (i) => {
    this.state.data.splice(i,1);
    this.setState({data: this.state.data});
  };
  render() {
    const { data } = this.state;
    return (
      <div>
        {data.map((user, i) => {
          return <div key={i}>
            <span>{user.name}</span>
            <input type='button' value='remove' onClick={(e) => this.remove(i)} />
          </div>
        })}
      </div>
    );
  }
}

1 个答案:

答案 0 :(得分:0)

您无需担心清洁它。 React将为您解决这一问题。 React使用虚拟DOM,所以这是关键的区别。

不过,您可以通过从onClick中删除箭头函数并绑定现有函数来优化代码。

更多信息和示例在这里:

https://reactjs.org/docs/faq-functions.html#bind-in-constructor-es2015

这是为什么箭头功能可能不是最佳选择的一些解释:

https://reactjs.org/docs/faq-functions.html#arrow-function-in-render