Size: a a a

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

2020 December 23

А

Артём in React — русскоговорящее сообщество
Алексей Коршунов
Всем привет
не пойму вещь, есть код
const onStorage = (data) => {
 console.log('data', data)
}

useEffect(() => {
 window.addEventListener("storage", onStorage);
 return () => {
  window.removeEventListener("storage", onStorage);
 };
}, []);
Меняю localStorage ручками есть console.log меняю программно - увы и ах
Уверен, что когда меняешь программно, у тебя смонтирован компонент в котором добавляешь обработчик события?
источник

А

Артём in React — русскоговорящее сообщество
Вообще подход вроде не правлиьный, так как если вдруг у тебя компонент перерендерится, у тебя добавится еще один обработчик, как минимум надо когда компонент размаунтится - удалять обработчик
источник

АК

Алексей Коршунов... in React — русскоговорящее сообщество
Артём
Уверен, что когда меняешь программно, у тебя смонтирован компонент в котором добавляешь обработчик события?
Да
источник

АК

Алексей Коршунов... in React — русскоговорящее сообщество
Артём
Вообще подход вроде не правлиьный, так как если вдруг у тебя компонент перерендерится, у тебя добавится еще один обработчик, как минимум надо когда компонент размаунтится - удалять обработчик
Это вопрос другой
источник

AS

Alex Safr in React — русскоговорящее сообщество
Ребят, есть у кого опыт с fcm?
источник

А

Александр in React — русскоговорящее сообщество
Артём
Вообще подход вроде не правлиьный, так как если вдруг у тебя компонент перерендерится, у тебя добавится еще один обработчик, как минимум надо когда компонент размаунтится - удалять обработчик
Зачем путаешь человека, у него эффект с пустыми зависимостями и удаление обработчика он уже делает.
источник

AA

Andrey Anelkin in React — русскоговорящее сообщество
Алексей Коршунов
Всем привет
не пойму вещь, есть код
const onStorage = (data) => {
 console.log('data', data)
}

useEffect(() => {
 window.addEventListener("storage", onStorage);
 return () => {
  window.removeEventListener("storage", onStorage);
 };
}, []);
Меняю localStorage ручками есть console.log меняю программно - увы и ах
Проблема у тебя в том, что когда ты меняешь программно local storage, то у тебя события никакого не отправляет в DOM. Также, как и при нажатии на кнопку программно( .click()), чтобы у тебя все корректно работало, тебе нужно отправить ивент в DOM.
источник

AA

Andrey Anelkin in React — русскоговорящее сообщество
И насчёт написания эффекта- у тебя все верно, Артём не разобрался :D , выше тебе верно сказали( Alexandr)
источник

АК

Алексей Коршунов... in React — русскоговорящее сообщество
Andrey Anelkin
Проблема у тебя в том, что когда ты меняешь программно local storage, то у тебя события никакого не отправляет в DOM. Также, как и при нажатии на кнопку программно( .click()), чтобы у тебя все корректно работало, тебе нужно отправить ивент в DOM.
Чуть-чуть не понял, мне нужно обновить любой элемент DOM
источник

AA

Andrey Anelkin in React — русскоговорящее сообщество
Алексей Коршунов
Чуть-чуть не понял, мне нужно обновить любой элемент DOM
5 минут, за комп сяду
источник

AA

Andrey Anelkin in React — русскоговорящее сообщество
Алексей Коршунов
Чуть-чуть не понял, мне нужно обновить любой элемент DOM
начнем с того, что я тебя обманул..  в реакте(как минимум) проблема с click() решена.. просто я сталкивался с таким ранее( с тем, что не посылается ивент в дом). насчет твоей проблемы. сделал код снипет. сейчас решу проблему. самое простое решение- это отправить event в дом
источник

AA

Andrey Anelkin in React — русскоговорящее сообщество
Алексей Коршунов
Чуть-чуть не понял, мне нужно обновить любой элемент DOM
Note: The storage event is only triggered when a window other than itself makes the changes.
https://www.w3schools.com/jsref/event_storage_url.asp
источник

AA

Andrey Anelkin in React — русскоговорящее сообщество
Алексей Коршунов
Чуть-чуть не понял, мне нужно обновить любой элемент DOM
и вот это https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API/Using_the_Web_Storage_API#Responding_to_storage_changes_with_the_StorageEvent

я вижу только один путь: пушнуть в дом ивент путем
window.dispatchEvent(new Event("storage"));
источник

ZS

Zhanadil Sadykov in React — русскоговорящее сообщество
ребята, не срабатывает анмаунтинг
useEffect(() => {
   specialtyDoctor && setInputValue(specialtyDoctor)
   return () => setInputValue([])
 }, [specialtyDoctor])

тыкаю "назад" например, и потом перезахожу в этот компонент, а там данные остаются сохраненными. При тыкании "назад", использую
history.goBack
источник

AB

Alexey Belov in React — русскоговорящее сообщество
Zhanadil Sadykov
ребята, не срабатывает анмаунтинг
useEffect(() => {
   specialtyDoctor && setInputValue(specialtyDoctor)
   return () => setInputValue([])
 }, [specialtyDoctor])

тыкаю "назад" например, и потом перезахожу в этот компонент, а там данные остаются сохраненными. При тыкании "назад", использую
history.goBack
Пустой массив зависимостей должен быть
источник

ZS

Zhanadil Sadykov in React — русскоговорящее сообщество
Alexey Belov
Пустой массив зависимостей должен быть
там на самом деле объекты, я для примера массив пустой поставил. Но все равно твой текст не понял
источник

NB

Not Dan, But... in React — русскоговорящее сообщество
Not Dan, But...
chrome и firefox как-то смогли понять что нужно ререндерить line если у него меняется аттрибут, а safari нет, это явный косяк именно движка.
Но за совет профайлера спасяб! Посмотрел по нему - он говорит, что и рефлоу и рекомпоуз происходит. Однако обнаружил, что при ререндере подсвечивается не область графика, а область слева от него… Какая-то дичь, связанная с неправильно рассчитанными оффсетами для перерендера скорее всего. Буду смотреть.
А я в очередной раз напоминаю о максимальном избегании использования относительных значений для, как минимум, SVG элементов и библиотек для них. Каждый движок, похоже, считает по-разному.
источник

AB

Alexey Belov in React — русскоговорящее сообщество
Zhanadil Sadykov
там на самом деле объекты, я для примера массив пустой поставил. Но все равно твой текст не понял
useEffect(() => () => {
   setInputValue([])
 }, []);
источник

ZS

Zhanadil Sadykov in React — русскоговорящее сообщество
Alexey Belov
useEffect(() => () => {
   setInputValue([])
 }, []);
так не работает к сожалению
источник

ZS

Zhanadil Sadykov in React — русскоговорящее сообщество
Alexey Belov
useEffect(() => () => {
   setInputValue([])
 }, []);
my mistake! Я то подгружаю данные то из редакс) Мне надо в редаксе данные очистить. А то он берет все равно с редакса обновляет данные
источник