我可以使用react-native中的refs以编程方式将事件处理程序添加到ListView或其他组件吗?

时间:2016-11-03 15:47:16

标签: react-native

您可以通过ref以编程方式将事件处理程序添加到组件吗?这会抛出一个错误,说addEventListener不是函数:

this.refs.myListView.addEventListener('onContentSizeChange', () => {...});

onContentSizeChange 事件被触发了很多,所以我只想在需要时附加一个处理程序,这就是为什么我不想在渲染函数中的组件声明上这样做。我希望能够以编程方式附加和分离。

1 个答案:

答案 0 :(得分:1)

ListView组件中没有方法addEventListener。这是错误消息的原因。

如果您想订阅onContentSizeChange事件,则必须在渲染功能上使用onContentSizeChange道具。您无法动态附加或分离侦听器。

此处参考是ListView.js的代码

 _onContentSizeChange: function(width: number, height: number) {
    var contentLength = !this.props.horizontal ? height : width;
    if (contentLength !== this.scrollProperties.contentLength) {
      this.scrollProperties.contentLength = contentLength;
      this._updateVisibleRows();
      this._renderMoreRowsIfNeeded();
    }
    this.props.onContentSizeChange && this.props.onContentSizeChange(width, height);
  }

在最后一行中,您可以看到,只有设置了this.props.onContentSizeChange,才会调用回调,并且在React中道具是不可变的。