Не срабатывает событие изменения sessinStorage

114
25 июня 2019, 18:30

При монтировании компонента устанавливаю обработчик изменения сессионного хранилища.

При программной записи в хранилище через 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>
        );
    }
}

Рабочий пример через сниппет создать не получается, поскольку запись в хранилище вызывает ошибку безопасности.

Answer 1

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.

Это событие для извещения об изменениях в хранилище, произошедших на другой странице, а не на той, где находится слушатель.

READ ALSO
Ошибка при запуске Service Worker PWA

Ошибка при запуске Service Worker PWA

Внедряю на сайт PWAПри запуске Service Worker возникает следующая ошибка:

145
Вызов модального окна ajax запросом

Вызов модального окна ajax запросом

Пытаюсь вызвать модальное окно с помощью ajax запроса но есть проблемаОкно по нажатию на кнопку вызывается только со 2 раза и после не закрывается...

121
Подключить виджет

Подключить виджет

Всем привет, есть такой виджет как voxeet вот ссылка https://developervoxeet

155