LocalStorage 是 Web Storage API 的一部分,它提供了一种在用户的浏览器中存储键值对数据的方式。LocalStorage 中的数据没有过期时间,会一直保存在用户的设备上,直到被明确删除。与 SessionStorage 不同,LocalStorage 中的数据在页面会话之间是持久的,即使页面刷新也不会丢失。
在 MERN(MongoDB, Express.js, React.js, Node.js)应用程序中,LocalStorage 不会在页面刷新时保持更新,这意味着在页面刷新后,之前存储在 LocalStorage 中的数据没有按预期更新或显示。
在 React 组件的 componentDidMount
或 useEffect
钩子中读取 LocalStorage 数据。
import React, { useEffect, useState } from 'react';
const MyComponent = () => {
const [data, setData] = useState(() => {
const storedData = localStorage.getItem('myData');
return storedData ? JSON.parse(storedData) : null;
});
useEffect(() => {
// 组件挂载时读取数据
const storedData = localStorage.getItem('myData');
if (storedData) {
setData(JSON.parse(storedData));
}
}, []);
useEffect(() => {
// 数据更新时保存到 LocalStorage
localStorage.setItem('myData', JSON.stringify(data));
}, [data]);
return (
<div>
{/* 渲染数据 */}
</div>
);
};
export default MyComponent;
如果数据是从服务器异步获取的,确保在数据到达并更新状态后,再更新 LocalStorage。
import React, { useEffect, useState } from 'react';
const MyComponent = () => {
const [data, setData] = useState(null);
useEffect(() => {
const fetchData = async () => {
const response = await fetch('/api/data');
const result = await response.json();
setData(result);
localStorage.setItem('myData', JSON.stringify(result));
};
fetchData();
}, []);
useEffect(() => {
const storedData = localStorage.getItem('myData');
if (storedData) {
setData(JSON.parse(storedData));
}
}, []);
return (
<div>
{/* 渲染数据 */}
</div>
);
};
export default MyComponent;
如果使用了 Redux 或其他状态管理库,确保在数据更新时同步更新 LocalStorage。
import { createStore } from 'redux';
const initialState = {
data: JSON.parse(localStorage.getItem('myData')) || null,
};
const reducer = (state = initialState, action) => {
switch (action.type) {
case 'UPDATE_DATA':
const newData = action.payload;
localStorage.setItem('myData', JSON.stringify(newData));
return { ...state, data: newData };
default:
return state;
}
};
const store = createStore(reducer);
export default store;
LocalStorage 适用于需要在用户设备上持久存储数据的场景,例如:
通过以上方法,可以确保在 MERN 应用程序中,LocalStorage 数据在页面刷新时保持更新。
领取专属 10元无门槛券
手把手带您无忧上云