Вот пример приложения чата →
Идея здесь состоит в том, чтобы .messages-container
занимал как можно больше экрана. В .messages-container
, .scroll
хранится список сообщений, а в случае появления большего количества сообщений размер экрана прокручивается.
Теперь рассмотрим этот случай:
- Пользователь прокручивается в нижней части беседы
-
.text-input
, динамически увеличивается
Теперь, вместо того, чтобы пользователь оставался прокручиваемым в нижней части разговора, текстовый ввод увеличивается, и они больше не видят дно.
Один из способов исправить это, если мы используем реакцию, вычислить высоту ввода текста, и если что-нибудь изменится, сообщите .messages-container
componentDidUpdate() {
window.setTimeout(_ => {
const newHeight = this.calcHeight();
if (newHeight !== this._oldHeight) {
this.props.onResize();
}
this._oldHeight = newHeight;
});
}
Но это вызывает видимые проблемы с производительностью, и печально, что такие сообщения передаются таким образом.
Есть ли лучший способ? Могу ли я использовать css таким образом, чтобы выразить, что когда .text-input-увеличивается, я хочу по существу shift up
все .messages-container