Как заполнить список карт Ant Design бэкэндом Firebase

PROPS: существует множество идентификаторов, исходящих от реквизита.

[ '61248A6Ad6dd05AD1FA','5AC1f5afF46a0c40Bf4', 'etc...' ]

FIREBASE: есть бэкэнд Firebase, где каждый из этих идентификаторов имеет одинаковые атрибуты.

  • 61248A6Ad6dd05AD1FA
    • 'title': 'Book 1'
    • 'author': 'Mark'
  • 5AC1f5afF46a0c40Bf4Fe
    • 'title': 'Book 2'
    • 'author': 'Lily'

ANT DESIGN: есть макет по умолчанию для списков карточек.

<List
    dataSource={this.renderBooks()}
    renderItem={item => (
      <List.Item>
        <Card title={item.title}>Book content</Card>
      </List.Item>
    )}
  />

Я пытаюсь перебрать массив и получить соответствующие данные для каждого идентификатора.
Затем заполните мой список в render()

class BooksView extends Component {
    state = {
        title: ''
    }

    renderBooks() {
        const books= this.props.ids.map(book => {
            return firebase.database().ref(`/ids/${book}`).on('value', s => s.val())
        });
        Promise.all(books)
            .then(item => {
                this.setState({title:item});
            });
    }

    render() {
        return (
            <div>
                <List
                    dataSource={this.renderBooks()}
                    renderItem={item => (
                        <List.Item>
                            <Card title={item.title}>Book content</Card>
                        </List.Item>
                    )} />
            </div>
        );
    }
}

export default BooksView;

С помощью state внутри рендера дает мне бесконечные петли.
Другие попытки дали мне неопределенные значения из-за асинхронной природы Firebase.

Как правильно заполнить список, используя обещания и преобразование массива-объекта?

0 ответов

Другие вопросы по тегам