(React / Firebase) Как выводить данные из БД?

Имеется база данных, а также сетка, в элементах которых надо вывести название и описание статьи, но пока здесь только лишь один элемент (картинки не трогаем).

введите сюда описание изображения

Данные в БД:

введите сюда описание изображения

Код сетки:

import * as React from 'react';
import { useState } from 'react';
import { styled } from '@material-ui/core/styles';
import { Grid, Container, Paper, Typography, ButtonBase, Box, IconButton } from '@material-ui/core';
import CloseRounded from '@material-ui/icons/CloseRounded';
import Popup from './Popup';
import axios from 'axios';

import { initializeApp } from "firebase/app";

const firebaseConfig = {
  apiKey: "AIzaSyA...99u4aMc",
  authDomain: "blog...aseapp.com",
  databaseURL: "https://blog...firebasedatabase.app",
  projectId: "blog...8b",
  storageBucket: "blog...8b.appspot.com",
  messagingSenderId: "762...901",
  appId: "1:76...d6c",
  measurementId: "G-G...WK"
};

const app = initializeApp(firebaseConfig);

const Img = styled('img')({
    width: '280px',
    borderTopLeftRadius: '4px',
    borderTopRightRadius: '4px'
  });

export default function Body(){
    const [link, setLink] = React.useState("");

    React.useEffect(() => {
        const fetchLink = async () => {
          const response = await axios("https://picsum.photos/560/280");
          setLink(response.request.responseURL);
        };
        fetchLink();
      }, []);
    
    return(
        <Container component="main" maxWidth="lg" sx={{mt: 10}}>
            <Grid sx={{m: 'auto'}} container columns={3}>


                // Здесь код элемента сетки
                <Grid item sx={{m:1, ml:0.5}}>
                    <Paper sx={{ width: 280 }}>
                        <ButtonBase >
                        <Box position="absolute" top={0} right={0}>
                        <IconButton>
                            <CloseRounded
                                fontSize="small"
                                sx={{
                                background:'rgba(0,0,0,0.5)',
                                borderRadius:'90em',
                                fill: 'white',
                                p: 0.25
                                }}
                            />
                        </IconButton>
                        </Box>
                        <Img alt="image" src={link} />
                        </ButtonBase>
                        <Box sx={{ p: 1 }}>
                        <Typography variant="subtitle1">Crowd Prediction</Typography>
                        <Typography variant="caption">
                            Crowd Predictions in Ford to forecast weekly vehicles sale volumes
                            across business units
                        </Typography>
                        </Box>
                    </Paper>
                </Grid>



            </Grid>
            <Popup/>
        </Container>
    );
}

Главный файл index.tsx:

import React from 'react';
import ReactDOM from 'react-dom';
import reportWebVitals from './reportWebVitals';
import Header from './Header';
import Body from './Body';
import Form from './Form';
import { BrowserRouter, Switch, Route } from 'react-router-dom';
import { initializeApp } from 'firebase/app';

ReactDOM.render(
    <div>
      <Header/>
      <BrowserRouter>
        <Switch>
          <Route path={'/'} exact component={Body}/>
          <Route path={'/create'} component={Form}/>
        </Switch>
      </BrowserRouter>
    </div>,
    document.getElementById('root')
);

reportWebVitals();

Как это делают? Вопрос конкретно состоит в том, что я не могу получить данные статей блога (заголовок и описание) из базы данных и вывести на страницу. И ещё - только TypeScript.


Ответы (1 шт):

Автор решения: Karo Hovhannisyan

Вы можете использовать библиотеку @react-firebase/firestore

Подключите ее как указано ниже, и после чего подключитесь к базе

Попробуйте посмотреть работу этой библиотеки.

import firebase from "firebase/app";
import "firebase/firestore";
const s = (a: any) => JSON.stringify(a, null, 2);

import {
  FirestoreCollection,
  FirestoreProvider
} from "@react-firebase/firestore";
.
.
.
 <FirestoreProvider {...config} firebase={firebase}>
    <FirestoreCollection path={"YOUR_COLLECTION_NAME"}>
       {({ value }) => {
         return (
           <div>
              <pre>{s(value).title}</pre>
              <pre>{s(value).body}</pre>
           </div>
         );
       }}
    </FirestoreCollection>
</FirestoreProvider>

→ Ссылка