Как распечатать ReactVirtualized Grids?

Есть ли функция/настройка для печати списков ReactVirtualized? Я хочу либо распечатать все содержимое списка (строки загружаются лениво, но, возможно, кто-то знает, как это сделать), либо напечатать то, что помещается на странице, без необходимости устанавливать размеры в пикселях.

Я просмотрел документы и ничего не нашел.

Спасибо.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
866
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

У меня была аналогичная проблема несколько месяцев назад, и в итоге я заставил ее работать с кнопкой печати, которая запускает функцию, которая изменяет CSS для отображения всего списка на странице (т.е. удаляет прокрутку), а затем перезагружает список полностью.

.ReactVirtualized__Grid {
    margin: none !important;
    overflow: visible !important;
    display: block;
    height: auto !important; //OR PUT A HUGE AMOUNT WHERE YOUR LIST WILL ALWAYS FIT (9999999px)
}

Может быть, есть более чистый способ сделать это, но я его не нашел, и это отлично сработало для того, что мне было нужно.

Я нашел способ сделать это, используя приведенное выше решение с медиа-запросом, css-vars и свойством overscanRowCount. (звучит много, но на самом деле очень коротко)

  • Иметь состояние для режима печати (true/false)
  • Если установлено значение true, установите для свойства react-virtualized максимальное количество строк (это будет актуально только при использовании вышеуказанного css)
  • Используя css-vars, передайте рассчитанную высоту таблицы в css
  • В css media query - режим печати, установить высоту в соответствии с переданным css-var
  • Вызовите print() только после того, как жизненный цикл реакции завершит рендеринг (не волнуйтесь, рендеринг не будет отображаться в окне браузера)

... Я использовал css-модули, но это можно сделать и на чистом css. ... Я надеюсь, что это достаточно ясно

   if (printMode) {        
        window.requestAnimationFrame(() => {
            //requestAnimationFrame is important because window.print is an async function
            window.print();
        })
    }
.paper123 {
    height: 400px;    
    width: 100%
}

@media print {
    .paper123 {
        height: var(--mh) !important; /*the calculated height passed as css-var */
        width: 100%
    }
    :global(.ReactVirtualized__Grid) {
        margin: none !important;
        overflow: visible !important;
        display: block;
        height: auto !important;
    }
}
/* React code */  
<div >
                <Paper className = {style.paper123} style = {{ "--mh": 48 * (rows.length + 1) + 'px' }}>
                    < VirtualizedTable
                        rowCount = {rows.length}
                        rowGetter = {({ index }) => rows[index]}
                        columns = {columns}
                        overscanRowCount = {!printMode ? 40 : rows.length} //overscanRowCount property means that you can define the max number of rows prerendered in the virtualized-table
                    />
                </Paper >
            </div>

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