ReactJS - Evitar renderizar componente de cada llamado a la API

 
Vista:
sin imagen de perfil

Evitar renderizar componente de cada llamado a la API

Publicado por Jose (3 intervenciones) el 26/10/2021 19:17:46
Soy algo nuevo en React y me esta pasando algo que me imagino que es sencillo para alguien experimentado. Estoy llenando un tabla con una api y luego esa tabla la descargo en un archivo pdf y cada tabla en una pagina diferente.

Hago mas de un llamado a una api entonces la info que traigo la mapeo en un componente y luego lo renderizo, lo que me esta pasando es que me esta renderizando 1 componente por cada llamado o sea que que si hago 100 llamados a la api me renderiza 100 componentes y no quiero eso. ¿Qué quiero?, Que me renderice solo 1 componente en el DOM pero cuando le de a descargar ese archivo si venga con todas las tablas (Componentes) de todos los llamados que hice en el archivo PDF claro.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
import React, { useState, useEffect, useRef } from 'react';
import axios from 'axios';
import { Table, Button } from 'reactstrap';
import { PDFExport } from '@progress/kendo-react-pdf';
 
const styles = {
  title: {
    textAlign: 'center',
    fontSize: '20px',
    fontWeight: 'bold',
  },
  subtitle: {
    textAlign: 'center',
    background: '#67B71F',
    color: 'white',
    fontSize: '15px',
  },
 
  td: {
    fontSize: '15px',
  },
  th: {
    fontSize: '15px',
    fontWeight: 'bold',
  },
  button: {
    fontWeight: 'bold',
  },
};
const options = {
  headers: {
    Authorization: process.env.REACT_APP_GETTOKENPDF,
  },
};
 
const BlankPage = () => {
  const pdfExportComponent = useRef(null);
  const [InfoData, setInfoData] = useState([]);
 
  useEffect(() => {
    const apiURL = `${process.env.REACT_APP_URL_PDF}?conditional=idMerchant$in28::4193`;
    axios
      .get(`${apiURL}`, options)
 
      .then(({ data }) => {
        setInfoData(data.data);
      })
      .catch((error) => {
        console.log('Alerta error: ', error.data);
      });
  }, []);
 
  const Registers = () => (
    <>
      {InfoData.map((res) => (
        <div className="card text-left " key={res.idMerchant}>
          <PDFExport forcePageBreak=".page-break">
            <Table className="table table-bordered">
              {/* <caption style={styles.title}>INFORMACION DE REGISTRO</caption> */}
              <tbody>
                <tr>
                  <td style={styles.th} colSpan="1">
                    Nombre de la Cuenta:
                  </td>
                  <td style={styles.td}>{res.merchantName}</td>
                  <td style={styles.th}>ID:</td>
                  <td style={styles.td}>{res.idMerchant}</td>
                </tr>
                <tr>
                  <td style={styles.th}>Usuario que registro la cuenta:</td>
                  <td style={styles.td}>{res.officerUpdate}</td>
                  <td style={styles.th}>Fecha:</td>
                  <td style={styles.td}>{res.activationDate}</td>
                </tr>
                <tr>
                  <td style={styles.th}>Tipo de cuenta:</td>
                  <td style={styles.td}>{res.merchantType}</td>
                </tr>
                <tr>
                  <td style={styles.td} colSpan="4">
                    Los terminos y condiciones son aceptados por defecto al
                    momento del registro de la cuenta.
                    <a href="https://www.paguelofacil.com/terminos-y-condiciones">
                      <br />
                      https://www.paguelofacil.com/terminos-y-condiciones
                    </a>
                  </td>
                </tr>
                </tr>
              </tbody>
            </Table>
          </PDFExport>
        </div>
      ))}
    </>
  );
 
  return (
    <>
      <PDFExport
        forcePageBreak=".page-break"
        fileName="Archivo.pdf"
        scale={0.9}
        paperSize="a4"
        keepTogether="Table"
        ref={pdfExportComponent}
      >
        <Registers />
      </PDFExport>
      <br />
      <Button
        className="k-button"
        onClick={() => {
          if (pdfExportComponent.current) {
            pdfExportComponent.current.save();
          }
        }}
      >
        Exportar en PDF
      </Button>
    </>
  );
};
 
export default BlankPage;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de 7aamin
Val: 9
Ha mantenido su posición en ReactJS (en relación al último mes)
Gráfica de ReactJS

Evitar renderizar componente de cada llamado a la API

Publicado por 7aamin (26 intervenciones) el 27/10/2021 02:46:58
Hola, no entiendo muy bien que es lo que quieres.. pero si dices que te esta renderizando es porque estas haciendo un map() a todos los elementos que tienes en el Array de InfoData ...
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
sin imagen de perfil

Evitar renderizar componente de cada llamado a la API

Publicado por Jose (3 intervenciones) el 27/10/2021 03:01:47
Bueno, por ejm allí hago un map de 2 tablas porque llame a 2 IDs me salen las 2 tablas en el DOM y cuando le doy al boton me descarga un archivo pdf con esas 2 tablas, 1 en cada pagina.

Pero y si son 20 IDs los que solicito serian 20 tablas, serian 20 paginas en el pdf (no hay problema ahi) pero entonces también serian 20 componentes en el DOM.

Lo que busco es que en el pdf me aparezcan las 2 tablas 1 en cada pagina por ejm pero que en el DOM no por el hecho de que si fueran 100 tablas entonces tendria 100 componentes en el DOM.

O que también si se pudiera que en el DOM solo aparezca 1 componente tabla (como ejm) pero que ya si en el pdf me aparezca todas las que alla solicitado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar