я понял каждое изменение значения хранящее ориентации экрана создаёт новую ячейку памяти, и их надо удалять, а я этого не делаю? Или как?
каждый раз когда меняется стейт - “перезапускается” твой компонент и в твоем случае ты делаешь еще раз подписку на обновление в итоге у тебя как будто 2 подписки ты можешь проверить если посмотришь логи проведи тест и ты поймешь в чем дело добавь лог вот так: Dimensions.addEventListener('change', () => { console.log(“event received”) Orientation.getOrientation(set_screen_orientation) }); переверни устройство первый раз - у тебя будет 1 сообщение потом переверни еще несколько раз и кол-во сообщений которое ты будешь получать будет рости - это и есть утечка поэтому все надо завернуть в useEffect и сделать еще “отписку” от события при удалении компонента
Понял, спасибо большое что объяснили 👍
Можете пожалуйста объяснить как завернуть в UseEffect и сделать отписку?
Вот так? const [screen_orientation, set_screen_orientation] = useState(Orientation.getInitialOrientation) const [test, set_test] = useState(0) useEffect(() => { function on_screen_orientation_changed() { Orientation.getOrientation(set_screen_orientation) set_test(test + 100) console.log('Screen orientation was changed') // обработчик события изменения размеров экрана }; const dimensionsListener = Dimensions.addEventListener('change', on_screen_orientation_changed); return () => { dimensionsListener.remove(); }; });
ну вроде все верно. я бы вынес on_screen_orientation_changed из useEffect но это чисто из эстетических соображений
Обсуждают сегодня