React Native - 使用 Firebase 的 ListView

這是我在使用 Firebase 時所做的事情,我想使用 ListView。

使用父元件從 Firebase(Posts.js) 檢索資料:

Posts.js

import PostsList from './PostsList';

class Posts extends Component{
    constructor(props) {
        super(props);
        this.state = {
            posts: []
        }
    }
    
    componentWillMount() {
        firebase.database().ref('Posts/').on('value', function(data) {
            this.setState({ posts: data.val() });
        });
    }

    render() {
        return <PostsList posts={this.state.posts}/>
    }
}

PostsList.js

class PostsList extends Component {
    constructor(props) {
        super(props);
        this.state = {
            dataSource: new ListView.DataSource({
                rowHasChanged: (row1, row2) => row1 !== row2
            }),
        }
    }

    getDataSource(posts: Array<any>): ListView.DataSource {
        if(!posts) return;
        return this.state.dataSource.cloneWithRows(posts);
    }

    componentDidMount() {
        this.setState({dataSource: this.getDataSource(this.props.posts)});
    }

    componentWillReceiveProps(props) {
        this.setState({dataSource: this.getDataSource(props.posts)});
    }

    renderRow = (post) => {
        return (
            <View>
                <Text>{post.title}</Text>
                <Text>{post.content}</Text>
            </View>
        );
    }

    render() {
        return(
            <ListView
                dataSource={this.state.dataSource}
                renderRow={this.renderRow}
                enableEmptySections={true}
            />
        );
    }
}

我想指出,在 Posts.js 中,我不是要匯入 firebase,因為你只需要在專案的主要元件(你有導航器的地方)中匯入一次,然後在任何地方使用它。

這是我在與 ListView 鬥爭時遇到的問題中有人建議的解決方案。我認為分享它會很好

資料來源:[ http://stackoverflow.com/questions/38414289/react-native-listview-not-rendering-data-from-firebase] [1 ]