更新Flatlist数据后的ScrollToEnd

Tua*_*uoc 4 react-native react-native-flatlist

我正在与建立一个聊天框Flatlist。我想向数据添加一个新项目,然后滚动到列表底部。我使用scrollToEnd方法,但是没有用。我怎样才能做到这一点?

<FlatList
        ref="flatList"
        data={this.state.data}
        extraData = {this.state}
        renderItem={({item}) => <Text style={styles.chatFlatListItem}>{item.chat}</Text>}
/>

AddChat(_chat){
    var arr = this.state.data;
    arr.push({key: arr.length, chat: _chat});
    var _data = {};
    _data["data"] = arr;
    this.setState(_data);
    this.refs.flatList.scrollToEnd();
 }
Run Code Online (Sandbox Code Playgroud)

小智 11

const flatList = React.useRef(null)
<FlatList
        ref={flatList}
        onContentSizeChange={() => {
            flatList.current.scrollToEnd();
        }}
        data={this.state.data}
        extraData = {this.state}
        renderItem={({item}) => <Text style={styles.chatFlatListItem}>{item.chat}</Text>}
/>
Run Code Online (Sandbox Code Playgroud)

试试这个,它有效。


Tua*_*uoc 5

谢谢@Kernael,只需添加一个超时,如下所示:

setTimeout(() => this.refs.flatList.scrollToEnd(), 200)
Run Code Online (Sandbox Code Playgroud)


Our*_*abi 5

我发现了一个更好的解决方案,scrollToEnd()因为它是在对进行更改之前触发的,因此无法正常工作FlatList
因为它继承ScrollView了最好的方法scrollToEnd()onContentSizeChange所以像这样调用:

<FlatList
            ref = "flatList"
            onContentSizeChange={()=> this.refs.flatList.scrollToEnd()} /> 
Run Code Online (Sandbox Code Playgroud)