Vadim
Vadim
Anonymous
i
всем привет, подскажите http://prntscr.com/nw1nrc как прокрутить контейнер компонента вниз когда у него контент пополнился новым блоком?
i
this.scrollTop = this.scrollHeight;
i
я попробывал так внутри компоненте в рендере. но не сработало
i
а как получитьь ссылкеу на компонент?
Aliaksandr
@Mramoris, ref в реакте. https://reactjs.org/docs/refs-and-the-dom.html
Aliaksandr
Ссылка сохраняется после mount'а. Уже в componentDidUpdate() можно использовать эту ссылку, чтобы прокрутить элемент вниз
Aliaksandr
Ну и не забудь это все инкапсулировать. Полагаю, задача компонента не в прокручивании контента вниз, а в отрисовке сообщений
i
да
i
http://prntscr.com/nw1swt не так?
Aliaksandr
Не совсем. Ссылка создается в конструкторе или как classProperty. Она неизменяемая. А потом ее передаешь как свойство в элемент, DOM-ссылку которого хочешь сохранить
Aliaksandr
В рендере будет код что-то вроде: <div className="wrapper" ref={this.myRef}>. А в componentDidUpdate() делаешь this.myRef.current.scrollTop = this.myRef.current.scrollHeight
i
http://prntscr.com/nw1uri
i
http://prntscr.com/nw1vhx почему-то он в дид апдет даже консоль лог не выводит
Andrei
Блять, читайте доку
Andrei
Бесите
Andrei
Там всё это описано, это база
🦜
))
Александр
Умение читать сейчас увы к потерянным навыкам относится
Aliaksandr
Обращение к этому DOM-элементу возможно только через .current-свойство. А консоль не логируется, если обновления не было
Aliaksandr
И да, советую внимательно копировать код из документации, там ведь подробно написано
Andrei
Andrei
Пусть сам
Andrei
Трясёт
Andrei
Уже даже русская дока есть
Aliaksandr
Вопрос из разряда мелких оптимизаций. Какой компонент быстрее работает и почему: который наследуется от чего-то или полученный в результате оборачивания? Кто разбирался в этом?
Александр
Andrei
extends
Andrei
наверное
Aliaksandr
class A extends React.Component {}
Александр
Aliaksandr
Хм, а так-то при наследовании прототипы и все прочее затрагивается
Aliaksandr
А при оборачивании реакт тянет свое
Александр
Нет разницы
Если быть точнее, то это уже premature optimization, если только вы уперлись в производительность и других путей оптимизации нет, то можно и такими вопросами задаться. На моем опыте до такого не доходило.
Aliaksandr
Насколько я помню, наследование быстрее работало года полтора назад. Но в тот момент могла сыграть роль оптимизация на уровне движка. Разумеется, это уже детали, однако я с таким уже сталкивался. Все от требований к продукту зависит
Александр
Aliaksandr
На данный момент теоретический интерес. В то время - практический
Aliaksandr
Нужно конкретизировать "упирались в производительность". Задача - спроектировать архитектуру FE-приложения и дать объяснение, почему так лучше, чем по-другому. Я могу путать, но там играла роль оптимизации на уровне V8
Aliaksandr
Конечно, обычно оптмизаций на уровне правильно продуманных интерфейсов компонентов, правильных иерархий и чистоты компонентов хватает, разумеется
Aliaksandr
Ну и по этой же причине я советовал @Mramoris убрать скролл из render() 🙂
Александр
Aliaksandr
render() {
this.aRef.current.scrollTop = this.aRef.current.scrollHeight;
// Code goes here
}
i
Aliaksandr спасибо
Александр
Aliaksandr
Andrey
Всем привет
Aliaksandr
Aliaksandr
А что с ними не так, перевёл последний проект на них, доволен
https://reactjs.org/docs/hooks-reference.html#useeffect
Я всегда был в восторге от этих предложений: "Mutations, subscriptions, timers, logging, and other side effects are not allowed inside the main body of a function component (referred to as React’s render phase). Doing so will lead to confusing bugs and inconsistencies in the UI.
Instead, use useEffect. The function passed to useEffect will run after the render is committed to the screen. Think of effects as an escape hatch from React’s purely functional world into the imperative world."
Andrey
Мне велели за вами присмотреть и поучиться новому
Yaroslav
Вот и правильно, у нас есть кукис
Yaroslav
Хуки
Александр
Andrei
Aliaksandr
Александр
Aliaksandr
Определение сайд-эффекта в теле функции и есть сайд-эффект, не так ли?
Aliaksandr
Разумеется. А сам вызов метода useEffect(), useState()?
Dmitriy
Хмм.. а что если эти два Александра - это один человек?💁♂
Александр
Aliaksandr
Kurzdor
Ребят, а кто то знает рабочий сканнер qr кодов для реакта?
Александр
Александр
Мы кажется очень отдалились от исходного вопроса :)