Size: a a a

React — русскоговорящее сообщество

2020 October 26

a

artalar in React — русскоговорящее сообщество
Daniel Mednikov
там про иммутабельность ничего
- иммутабельность либо очень дорогая по перфу (при клонировании), либо не очень френдли в дебаге, при использовании оптимизирующий структур данный
- реактивность с использованием иммутабельности, т.е. через change detection вообще не производительная и оверхедная как с точки зрения библиотечного кода, так и с точки зрения пользовательского.

Решите ка мне такую задачу:
function TableWithFilters() {
 const [filter, updateFilter] = useState()
 const getData = useCallback((cursorId) => api.get('/rows', {filter, cursorId}), [filter])
 
 return <>
   <input value={filter} onChange={e => updateFilter(e.target.value)} />
<Table getData={getData}/>
 </>

}

Есть компонент Table с методом getData, который дергается при нажатии кнопок пагинации, которые внутри таблицы. Фильтры у нас описаны отдельным компонентом и проблема в том что при изменении фильтра нам нужно пересоздать функцию getData и сделать ререндер таблицы. Но ререндер таблицы - дорогая операция, ее нет смысла делать на каждый onChange. Задача - не вызывать Table при изменении фильтра, но предоставлять актуальный getData
источник

A

Arman in React — русскоговорящее сообщество
Проблема с react-pdf, кто нибудь сталкивался ?
источник

AM

Andrew Melnychuk in React — русскоговорящее сообщество
artalar
- иммутабельность либо очень дорогая по перфу (при клонировании), либо не очень френдли в дебаге, при использовании оптимизирующий структур данный
- реактивность с использованием иммутабельности, т.е. через change detection вообще не производительная и оверхедная как с точки зрения библиотечного кода, так и с точки зрения пользовательского.

Решите ка мне такую задачу:
function TableWithFilters() {
 const [filter, updateFilter] = useState()
 const getData = useCallback((cursorId) => api.get('/rows', {filter, cursorId}), [filter])
 
 return <>
   <input value={filter} onChange={e => updateFilter(e.target.value)} />
<Table getData={getData}/>
 </>

}

Есть компонент Table с методом getData, который дергается при нажатии кнопок пагинации, которые внутри таблицы. Фильтры у нас описаны отдельным компонентом и проблема в том что при изменении фильтра нам нужно пересоздать функцию getData и сделать ререндер таблицы. Но ререндер таблицы - дорогая операция, ее нет смысла делать на каждый onChange. Задача - не вызывать Table при изменении фильтра, но предоставлять актуальный getData
Можно сделать компонента обертку для инпут, который будет рендерить инпут без задержек и будет иметь onChange (в пропсах) который будет срабатывать с дебаунсом
источник

a

artalar in React — русскоговорящее сообщество
Andrew Melnychuk
Можно сделать компонента обертку для инпут, который будет рендерить инпут без задержек и будет иметь onChange (в пропсах) который будет срабатывать с дебаунсом
дебаунс можно и на мемоизацию useCallback поставить. Как без дебаунса, как не ререндерить таблицу вообще?
источник

AE

Alexey Ermakov in React — русскоговорящее сообщество
artalar
- иммутабельность либо очень дорогая по перфу (при клонировании), либо не очень френдли в дебаге, при использовании оптимизирующий структур данный
- реактивность с использованием иммутабельности, т.е. через change detection вообще не производительная и оверхедная как с точки зрения библиотечного кода, так и с точки зрения пользовательского.

Решите ка мне такую задачу:
function TableWithFilters() {
 const [filter, updateFilter] = useState()
 const getData = useCallback((cursorId) => api.get('/rows', {filter, cursorId}), [filter])
 
 return <>
   <input value={filter} onChange={e => updateFilter(e.target.value)} />
<Table getData={getData}/>
 </>

}

Есть компонент Table с методом getData, который дергается при нажатии кнопок пагинации, которые внутри таблицы. Фильтры у нас описаны отдельным компонентом и проблема в том что при изменении фильтра нам нужно пересоздать функцию getData и сделать ререндер таблицы. Но ререндер таблицы - дорогая операция, ее нет смысла делать на каждый onChange. Задача - не вызывать Table при изменении фильтра, но предоставлять актуальный getData
удобство разработки почти всегда > железных ресурсов
ресурсы по времени > ресурсов по пространству

(не/трудно)поддерживаемая мутабельная система < простая в поддержке, но чуть более медленная иммутабельная
источник

a

artalar in React — русскоговорящее сообщество
Зависит от того как мутабельная система и ее изменения устроены
источник

a

artalar in React — русскоговорящее сообщество
Если это аля event sourcing - дебаг не проблема, даже наоборот
источник

IN

Igor N in React — русскоговорящее сообщество
Arman
Проблема с react-pdf, кто нибудь сталкивался ?
у тебя же там всё разжёвано, что делать
источник

A

Arman in React — русскоговорящее сообщество
Igor N
у тебя же там всё разжёвано, что делать
Да в конце показано что нету модулей от stream до buffer, а всё из-за @react-pdf/renderer
источник

AE

Alexey Ermakov in React — русскоговорящее сообщество
ивенты тоже не бесплатные
в общем, it depends.
источник

A

Arman in React — русскоговорящее сообщество
Arman
Да в конце показано что нету модулей от stream до buffer, а всё из-за @react-pdf/renderer
Не охота грузить ещё 7 пакетов ради этой фигни
источник

О

Олег in React — русскоговорящее сообщество
подскажите причину ошибки в тестах. обернул Component в Wrapper
источник

О

Олег in React — русскоговорящее сообщество
источник

О

Олег in React — русскоговорящее сообщество
Понимаю , что причина в том что Component рендерится до того как зарендерился <Provider> но вот почему это происходит, это впрос
источник

О

Олег in React — русскоговорящее сообщество
кажется понял. скорее всего потому что showErrors надо обернуть в useEffect.
источник

KF

K F in React — русскоговорящее сообщество
Egor
спасибо за помощь
b в таких ситуациях объявляется как var

вот такие вот задачки с сабеса)
Не как var b, а как window.b может?
источник

E

Egor in React — русскоговорящее сообщество
var вроде и создаёт в window поле
источник

И

Иван in React — русскоговорящее сообщество
K F
Не как var b, а как window.b может?
чуваки, в @js_noobs_ru это уже обсудили. давайте туда
источник

И

Иван in React — русскоговорящее сообщество
Egor
var вроде и создаёт в window поле
👆🏿
источник

О

Олег in React — русскоговорящее сообщество
Олег
кажется понял. скорее всего потому что showErrors надо обернуть в useEffect.
да, ошибка была в этом. showErrors срабатывал слишком быстро.
источник