2017-06-02 109 views
9

我試圖創建,保持鎖定當前滾動位置並沒有通過插入在列表頂部新項目改變FlatList。鎖定滾動位置

我創建了一個expo snack來證明我的意圖。

小吃呈現在結束與綠色項目滾動型,黑色的項目。 當應用程序啓動它滾動到列表的底部。五秒後10項被插入在頂部,和滾動位置根據這些物品的總尺寸變化。

這是世博會的小吃代碼:

import React, { Component } from 'react'; 
import { View, FlatList } from 'react-native'; 

const renderItem = ({ item }) => { 
    let backgroundColor; 
    if (item == 10) { 
    backgroundColor = "black" 
    } 
    else { 
    backgroundColor = item % 2 == 0 ? 'green' : 'blue' 
    } 

    return (
    <View 
     style={{ 
     width: 200, 
     height: 50, 
     backgroundColor, 
     margin: 10, 
     }} 
    /> 
); 
}; 

const MyList = class extends Component { 
    componentDidMount() { 
    setTimeout(() => this.ref.scrollToEnd({ animated: false }), 500); 
    } 
    render() { 
    return (
     <FlatList 
     ref={r => this.ref = r} 
     data={this.props.data} 
     renderItem={this.props.renderItem} 
     /> 
    ); 
    } 
}; 

export default class App extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     items: [2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 10], 
    }; 
    } 

    componentDidMount() { 
    const items = [...this.state.items]; 
    items.unshift(1, 1, 1, 1, 1, 1, 1, 1, 1, 1); 
    setTimeout(() => this.setState({ items }), 5000); 
    } 

    render() { 
    return <MyList renderItem={renderItem} data={this.state.items} />; 
    } 
} 

我想保持鎖定滾動位置,這意味着 - 當插入滾動立場不會改變項目(或至少在某種程度上用戶不知道發生什麼意外)

有沒有辦法用FlatList和滾動型的當前API辦呢?需要實現哪些功能才能實現此功能?

回答