reactjs - 本地存储与 redux 状态
问题描述
我目前有一个使用 redux 的应用程序,我设置它每次加载应用程序时检查 JWT 令牌是否有效并将用户数据添加到状态。
我想知道调用api然后在每次重新加载时将数据存储在状态中或将数据存储一次之间有什么区别localStorage
?
如何通过调用 api 和使用 redux 存储来设置代码。
检查令牌
const token = localStorage.UserIdToken;
if (token) {
const decodedToken = jwtDecode(token);
if (decodedToken.exp * 1000 < Date.now()) {
store.dispatch(logoutUser());
} else {
store.dispatch({ type: SET_AUTHENTICATED });
axios.defaults.headers.common['Authorization'] = token;
store.dispatch(getUserData());
}
}
getUserData()
export const getUserData = () => async dispatch => {
try {
const res = await axios.get('/user');
dispatch({
type: SET_USER,
payload: res.data,
});
}
...
};
解决方案
首先,将数据存储一次localStorage
意味着用户将不会收到对其数据的更新,但将始终收到相同的更新。想想每次登录时都看到相同的社交媒体提要,如果它被保存,localStorage
而不是每次重新加载时都从 api 请求,就会出现这种情况。
其次,存储数据localStorage
而不是 redux 状态意味着您可以使用使用 state 和 redux 的好处——redux 确保组件在依赖于状态更改时重新呈现。这可确保组件响应用户操作。localStorage
不会那样做。
根据您的评论,我认为您应该考虑另一个原因:localStorage
如果您想更改用户数据(例如添加一个字段),使用可能会带来问题。如果数据在 1 个位置,您可以更改所有用户数据并让用户在下次重新加载时提取新数据。如果数据在 中localStorage
,您将需要向您的应用程序添加代码,该代码将在第一次重新加载时更改现有数据,然后在其他时间不执行任何操作。这不是一个好的模式,并且更有可能出现错误和问题。
推荐阅读
- docker - Docker:错误标志背后的主要原因是什么:0x5001:设备上没有剩余空间
- android - 遍历Arraylist并将联系人添加到arraylist
- amazon-web-services - aws 如何在输入桶中删除大量视频,并在输出桶中填充转码版本
- react-native - 构建成功但使用 adb reverse 连接到开发服务器失败
- c# - 在 C# 中将 JSON 对象反序列化为 DataSet 的新方法是什么?
- java - 编译后的class文件在Java中保留了多少源代码信息?
- visual-studio-code - VS Code FTP Simple 作为 Atom FTP 编辑
- java - Quartz 作业注解@DisallowConcurrentExecution 实现
- build - 在跨平台环境中管理 conda env
- php - php.ini 已修改,但无法上传文件