Проблема с изменением размера обеих панелей в React-Split-Pane

У меня есть горизонтально разделенная панель для одного из моих проектов в React.js. Я использую React-Split-панель для обработки логики изменения размера. Каждая панель содержит таблицу с несколькими другими компонентами.

Проблема, с которой я столкнулся, заключается в том, чтобы нижняя панель настраивала свой размер в соответствии с оставшимся пространством в SplitPane. Например, если общая высота контейнера составляет 1000 пикселей, а размер верхней панели изменяется до 300 пикселей, мне нужно, чтобы размер нижней панели был 700 пикселей. Мне удалось изменить размер нижней панели до размера одно и тоже верхней панели. Как я могу заставить нижнюю панель изменить размер до размера оставшегося пространства всего контейнера?

У меня упрощенное воссоздание проблемы в песочнице здесь

Вторая проблема, с которой я столкнулся, заключается в том, что когда я изменяю размер с помощью этой новой логики, она выглядит очень нестабильной и немного тормозит. Вы не можете сказать в песочнице, но в реальном проекте все становится очень плохо. Есть ли лучший способ решить эту проблему, который сделает изменение размера более плавным? Если да, то как я могу этого добиться?

Спасибо!

Поведение ключевого слова "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
1 477
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

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

Это то, чего вы пытаетесь достичь? Песочница

Я просто добавил логику в вашу функцию toggleBtmHeight, чтобы узнать, какой должна быть высота нижней панели после изменения размера. Когда вы изменяете размер панели, обратный вызов onChange передает вам высоту панели начальный (вверху). Вам нужно использовать maxHeight - topPaneHeight = bottomPaneHeight, чтобы определить, какой должна быть высота нижней панели:

toggleBtmHeight(topPaneHeight) {
  const maxHeight = 1000;
  const padding = 225;
  const btmPaneHeight = maxHeight - topPaneHeight - padding;
  this.setState({ btmHeight: btmPaneHeight + "px" });
}

Что касается того, как справиться с нестабильностью, трудно сказать, не видя ее в полном контексте вашего приложения, но я бы предположил, что когда вы обновляете состояние, он повторно отображает кучу компонентов, вызывающих задержку. Я бы посмотрел на добавление shouldComponentUpdate к вашим компонентам, чтобы помочь управлять, когда они действительно должны быть повторно отрисованы.

Именно то, что я искал! Спасибо за помощь. И да, волнение происходит из-за повторного рендеринга компонентов. Насколько я могу судить, обновляется просто встроенный стиль, но я рассмотрю shouldComponentUpdate.

A. Curl 30.05.2018 00:09

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