2014-02-12 4 views
8

Я хотел бы сохранить состояние своего приложения в localStorage. Есть ли обратный вызов или событие, которое срабатывает при изменении состояния? Я бы использовал его для звонка localStorage.state = JSON.stringify(this.state). Возможно, используя 0,5 сек. Дросселирования.React.js: Синхронизация всего состояния с localStorage

TodoMVC React examples использует localStorage как хранилище. Однако он определяет сохранение и удаление в обработчиках событий, таких как keydown и click. Для моего дела, сделав то же самое, будет создано множество шаблонов.

ответ

22

В методе с componentDidUpdate жизненным циклом можно сериализовать состояние:

componentDidUpdate: function(prevProps, prevState) { 
    localStorage.state = JSON.stringify(this.state); 
} 

Этот код будет выполняться каждый раз, когда компонент повторно выводит (что случается с каждым реквизита или изменения состояния).

+4

Это хорошо работает для Реактива в одиночку, для тех, кто пытается это сделать, используя React + Flux, имейте в виду, что вам также нужно сохранять магазины в синхронизации с этим. В этом случае вы можете инициализировать состояние каждого Хранилища из localStorage.state, или вы можете кэшировать данные каждого магазина отдельно. –

+0

Это именно то, что у меня есть @ http://stackoverflow.com/questions/28375718/who-is-responsible-to-fetch-data-from-server-in-a-flux-app-with-caching – amirouche

+0

Вот [fiddle] (https://jsfiddle.net/ohujp97v/4/) этой работы в примере на основе TODO MVC на основе React. –

Смежные вопросы