发布于 2026-01-06 0 阅读
0

只需 5 行代码即可为您的 React Reducer 添加离线缓存功能

只需 5 行代码即可为您的 React Reducer 添加离线缓存功能

在构建 Web 应用程序时,我经常使用这种方法来添加状态的本地存储缓存。

假设我们从以下情况开始:


const [state, dispatch] = React.useReducer(
  reducer,
  initialState
)

第一步,我们创建一个方法,该方法接收一个 reducer 并输出另一个 reducer,即一个高阶函数:

const withLocalStorageCache = reducer => { return (state, action) => {
  const newState = reducer(state, action);
  localStorage.setItem("my-state", JSON.stringify(newState));
  return newState;
}};

我们在将结果传递给useReducerhook 之前,先用它包裹我们的 reducer。


const [state, dispatch] = React.useReducer(
  withCache(reducer),
  initialState
)


最后,我们将 initialState 替换为最新的缓存版本:

const [state, dispatch] = React.useReducer(
  withCache(reducer),
  localStorage.getItem("my-state")
)

就这样!

修改一行代码,新增 5 行代码,我们的整个状态就与 localStorage 同步了。

当然,我们可以将缓存范围限制在状态的特定部分,而不是整个状态对象。我们还可以根据操作或状态来限制缓存的更新。不过,这些就留给用户自行探索吧。

97.62% 的浏览器支持 localStorage。

完整演示

文章来源:https://dev.to/rakannimer/add-offline-caching-to-your-react-reducer-with-5-lines-of-code-470n