При монтировании компонента устанавливаю обработчик изменения сессионного хранилища.
При программной записи в хранилище через setItem
(нажатие кнопки) в отладчике я вижу, что значение меняется, но обработчик события не срабатывает.
Причем, если я вручную поменяю значение в отладчике, то событие отработает как требуется.
Хочется узнать, почему не отрабатывает событие?
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
message: 'Unchanged'
}
}
// При нажатии кнопки записываем случайное число в сессионное хранилище
onClick = () => {
sessionStorage.setItem('message', ''+Math.random());
};
componentDidMount() {
// Устанавливаем обработчик изменения сессионного хранилища
addEventListener('storage', evt => {this.onStorageChanged(evt)});
}
onStorageChanged(evt) {
// обработчик изменения сессионного хранилища
console.log(evt);
if(evt.storageArea === sessionStorage){
if(evt.key === 'message'){
this.setState({
message: evt.newValue
});
}
}
}
render() {
return (
<div>
<h3>{this.state.message}</h3>
<button
type="button"
onClick={this.onClick}
>
set message
</button>
</div>
);
}
}
Рабочий пример через сниппет создать не получается, поскольку запись в хранилище вызывает ошибку безопасности.
https://developer.mozilla.org/en-US/docs/Web/API/Web_Storage_API#Examples
if you load this page in another tab, then make changes to your choices in the landing page, you'll see the updated storage information outputted as the StorageEvent is fired.
то есть
если загрузить эту страницу в другой закладке, и потом сделать
изменения в первоначальной странице, Вы увидите ... вызов события
StorageEvent
.
Это событие для извещения об изменениях в хранилище, произошедших на другой странице, а не на той, где находится слушатель.
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
Внедряю на сайт PWAПри запуске Service Worker возникает следующая ошибка:
Пытаюсь вызвать модальное окно с помощью ajax запроса но есть проблемаОкно по нажатию на кнопку вызывается только со 2 раза и после не закрывается...