将FlatList与scrollToEnd一起使用

Org*_*cat 4 reactjs react-native

使用FlatList时,我有两个问题(它们都可以与ListView一起使用)。

我有一个列表,该列表通过每个项目的显示属性显示,然后像这样在我的FlatList中签入:

<FlatList
  ref='flatList'
  data={this.state.dataSource}
  enableEmptySections
  renderItem={({item}) => item.display && <Text>{item.text}</Text>} />
Run Code Online (Sandbox Code Playgroud)

当我更改显示属性时,它不会显示。在ListView设置中,此方法运行良好。

我的第二个问题是,scrollToEnd在scrollToEnd函数内的“ this._listref”上引发了未定义的错误。我没有给它传递任何参数。

setTimeout(this.refs.flatList.scrollToEnd, 0)
Run Code Online (Sandbox Code Playgroud)

我的问题是,如何更新列表数组中的数据,以便列表中的数据更改,第二个问题是如何解决scrollToEnd错误?

更新1 :(已删除数据,不再需要)

更新2:问题一已解决,该列表需要进行“ extraData”比较以查看其是否更新。固定版:

<FlatList
  ref='flatList'
  data={this.state.dataSource}
  extraData={this.state}
  enableEmptySections
  renderItem={({item}) => item.display && <Text>{item.text}</Text>} />
Run Code Online (Sandbox Code Playgroud)

这有点令人费解,但是我相信extraData可以用作比较,以查看该数据集中是否有任何更新。如果是这样,请重新渲染。这个问题解决了。

“未定义不是对象(正在评估'this._listRef')”仍然不固定

更新3:如果在setTimeoutFunction之外使用,则滚动功能有效

更新4:

设置初始数据数组

  this.state = {
    dataSource: pageService(state.params.page),
    cursor: 0
  }
Run Code Online (Sandbox Code Playgroud)

将显示设置为true:

  renderNextModule() {
    let newCursor = this.state.cursor
    if (newCursor < this.state.dataSource.length-1) {

        newCursor++
        let newSource = this.state.dataSource
        newSource[newCursor].display = true
        this.setState({
            dataSource: newSource,
            cursor: newCursor
        })
    }
  }
Run Code Online (Sandbox Code Playgroud)

Sur*_*mar 5

它对我的工作

data={this.state.messages}
ref = "flatList"
onContentSizeChange={()=> this.refs.flatList.scrollToEnd()}
Run Code Online (Sandbox Code Playgroud)