Если вы хотите, чтобы ваше состояние сохранялось после обновления, вам нужно будет сохранить состояние в localStorage в componentWillUnmount
, а затем сбросить состояние до того, которое было в componentDidMount
. Это
componentDidMount() {
const stateObject = JSON.parse(localStorage.getItem("state"));
this.setState(stateObject);
}
componentWillUnmount() {
localStorage.setItem("state", JSON.stringify(this.state));
}
Однако это может привести к неожиданным результатам, если componentWillUnmount не может быть вызван во время обновления. Поэтому более надежным (но менее производительным) методом будет обновление состояния до localStorage каждый раз, когда вы обновляете свое состояние. Это можно сделать, введя код в componentDidUpdate
.
componentDidUpdate(prevProps, prevState) {
if(prevState != this.state) {
localStorage.setItem("state", this.state);
}
}
UPDATE:
После некоторого исследования я обнаружил событие beforeunload
, которое могло бы работать довольно эффективно.
onUnload = (event) => {
localStorage.setItem("state", JSON.stringify(this.state)
}
componentDidMount() {
window.addEventListener("beforeunload", this.onUnload)
}
componentWillUnmount() {
window.removeEventListener("beforeunload", this.onUnload)
}
Однако имейте в виду, что onbeforeunload неправильно реализован в некоторых браузерах (например, Safari в iOS). Таким образом, вы можете столкнуться с некоторыми проблемами в этом отношении. Это список совместимости для события https://developer.mozilla.org/en-US/docs/Web/API/WindowEventHandlers/onbeforeunload#Browser_compatibility.