Size: a a a

2020 August 10

LH

Leo Hra in React Kyiv
Andrey
handleResize = () => { setWidth(window.innerWidth } - обробник на window.resize подію. useEffect спрацьовує раз, setWidth спрацьовує на зміну вікна. Виклик setWidth перезапускає ж хук.
значить в тебе анмаунтиться компонент абощо
источник

A

Andrey in React Kyiv
источник

LH

Leo Hra in React Kyiv
> If you want to run an effect and clean it up only once (on mount and unmount), you can pass an empty array ([]) as a second argument. This tells React that your effect doesn’t depend on any values from props or state, so it never needs to re-run. This isn’t handled as a special case — it follows directly from how the dependencies array always works.

https://reactjs.org/docs/hooks-effect.html
источник

A

Andrey in React Kyiv
Питання не про useEffect :)
источник

LH

Leo Hra in React Kyiv
> Виклик setWidth перезапускає ж хук.
источник

LH

Leo Hra in React Kyiv
який хук?
источник

A

Andrey in React Kyiv
Кастомний хук. В моєму прикладі це useWindowWidth.
источник

LH

Leo Hra in React Kyiv
зрозумів
источник

EM

Eugene M in React Kyiv
источник

LH

Leo Hra in React Kyiv
можливо спробуй обернути його в мемо
источник

A

Andrey in React Kyiv
Спробуйте відкрити консоль і зменшити/збільшити вікно.
источник

EM

Eugene M in React Kyiv
источник

EM

Eugene M in React Kyiv
ну вот и попробуй)
источник

EM

Eugene M in React Kyiv
какая задача стоит?
источник

EM

Eugene M in React Kyiv
при изменении по высоте он не будет дергаться
источник

EM

Eugene M in React Kyiv
при горизонтальном резайзе, очевидно будет
источник

A

Andrey in React Kyiv
Eugene M
какая задача стоит?
Це не мій реальний кейс. Я навішав обробник на window.resize, як приклад частого виклику хука і навмисно повертав 1 як постійне значення.

useWindowWidth спрацьовує на зміну ширини/висоти екрану, але повертає одне і те ж значення. Через постійне спрацювання useWindowWidth, App ререндериться.

Якщо провести аналогію з пропсами, то <App width={useWindowWidth()}, не повинен ререндеритись, якщо width буде те ж саме. От мені саме цю логіку потрібно отримати :)
источник

EM

Eugene M in React Kyiv
Ты путаешь
источник

VS

Vitalii Saienko in React Kyiv
Те, що вертає хук — це не аналогія пропса, скоріше стейта. Ти ж передаєш не зверху пропсами в компонент. Відповідно, навіть якщо значення не змінюється, стейт (хук) змінюється. Тому і ререндер
источник

EM

Eugene M in React Kyiv
Ты возвращаешь 1, но стейт меняешь
источник