11
Июн
2021

Как отрендеритm масcив объектов в который пришел из API и хранится в State?

Нужно каким то образом отрендерить все данные из API.

Есть функция и она принимает масив и рисует их:

const renderDataToTbody =  (infobus , index) => {
    const rendereDataBody = document.getElementById("rendredHere")
    
    let dataBusElement = (
        <tr key={infobus.index}>
          <td>{infobus.amountOfPlaces}</td>
          <td>{infobus.costOfTrip}</td>
          <td>{infobus.endBusTrip}</td>
          <td>{infobus.nameOfBus}</td>
          <td>{infobus.numberOfBus}</td>
          <td>{infobus.numberOfWay}</td>
          <td>{infobus.sequenceOfStops}</td>
          <td>{infobus.startBusTrip}</td>
        </tr>
    )
          console.log(infobus)
          ReactDOM.render(dataBusElement, rendereDataBody)  //RENDE
    } 

Но нужно рендерить в блок (renderedHere) по нажатию на кнопку(render__button) введите сюда описание изображения

На данном этапе рендерится только последний ряд из всего масива. Вот фото введите сюда описание изображения

Вот ссылка на песочницу (https://codesandbox.io/s/serene-glade-99fg9) Вот весь код компонента

import React, { useState } from "react";
import ReactDOM from "react-dom";
// import axios from 'axios';
import * as ReactBootStrap from "react-bootstrap";
import "../src/styles.css";
import firebase from "firebase/app";
import "firebase/database";
try {
  firebase.initializeApp({
    apiKey: "AIzaSyCsMQmMpcbBbO8e-MIs3T7JBjj7HO3d1U0",
    authDomain: "database-c3d42.firebaseapp.com",
    databaseURL:
      "https://database-c3d42-default-rtdb.europe-west1.firebasedatabase.app",
    projectId: "database-c3d42",
    storageBucket: "database-c3d42.appspot.com",
    messagingSenderId: "343229651763",
    appId: "1:343229651763:web:a172b056e0de9afa28bc46"
  });
} catch (err) {
  // we skip the "already exists" message which is
  // not an actual error when we're hot-reloading
  if (!/already exists/.test(err.message)) {
    console.error("Firebase initialization error", err.stack);
  }
}

const App = () => {
  const [BusInfo, setBusInfo] = useState(
    []
  ); /*Use hook useState for keeping STATE*/
  const database = firebase.database(); // connect to FIREBASE
  // FUNCTION for getting Data from API (FireBase)
  const getDataFromFireBase = async () => {
    let res = [];
    await database.ref("data").on("value", (snapshot) => {
      snapshot.forEach((snap) => {
        BusInfo.push(snap.val());
      });
    });
    return res;
  };
  const FetchData = () => {
    getDataFromFireBase(setBusInfo);
    console.log(BusInfo);
  };

  const renderDataToTbody = (infobus, index) => {
    const rendereDataBody = document.getElementById("rendredHere");
    let dataBusElement = (
      <tr key={index}>
        <td>{infobus.amountOfPlaces}</td>
        <td>{infobus.costOfTrip}</td>
        <td>{infobus.endBusTrip}</td>
        <td>{infobus.nameOfBus}</td>
        <td>{infobus.numberOfBus}</td>
        <td>{infobus.numberOfWay}</td>
        <td>{infobus.sequenceOfStops}</td>
        <td>{infobus.startBusTrip}</td>
      </tr>
    );

    console.log(infobus);

    if (rendereDataBody) {
      ReactDOM.render(dataBusElement, rendereDataBody); //RENDER
    }
  };

  /*-*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*--*-*- */
  return (
    <div className="App">
      <h1> БАЗА ДАННИХ "РОЗКЛАД АВТОБУСІВ"</h1>
      <button className="fetch-button" onClick={FetchData}>
        Fetch DATA
      </button>
      <div id="BusInfo">
        <ReactBootStrap.Table>
          {" "}
          {/*Здесь отрисовываем верхний столбик с полями  */}
          <thead>
            <tr>
              <th>Кількість Місць</th>
              <th>Вартість Білету</th>
              <th>Місце Прибуття</th>
              <th>Марка Автобусу</th>
              <th>Номер Автобусу</th>
              <th>Номер Маршруту</th>
              <th>Пункти Зупинок</th>
              <th>Місце відбуття</th>
            </tr>
          </thead>
          <tbody id="rendredHere"></tbody>
        </ReactBootStrap.Table>
        <button onClick={() => BusInfo.map(renderDataToTbody)}>
          RENDER TABLE
        </button>
      </div>
    </div>
  );
};

const rootElement = document.getElementById("root");
ReactDOM.render(<App />, rootElement);
export default App;


Источник: https://ru.stackoverflow.com/questions/1294172/%D0%9A%D0%B0%D0%BA-%D0%BE%D1%82%D1%80%D0%B5%D0%BD%D0%B4%D0%B5%D1%80%D0%B8%D1%82m-%D0%BC%D0%B0%D1%81c%D0%B8%D0%B2-%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D0%BE%D0%B2-%D0%B2-%D0%BA%D0%BE%D1%82%D0%BE%D1%80%D1%8B%D0%B9-%D0%BF%D1%80%D0%B8%D1%88%D0%B5%D0%BB-%D0%B8%D0%B7-api-%D0%B8-%D1%85%D1%80%D0%B0%D0%BD%D0%B8%D1%82%D1%81%D1%8F-%D0%B2-state

Тебе может это понравится...

Добавить комментарий