设置localStorage的值是否有副作用?

时间:2018-06-20 09:46:27

标签: javascript reactjs function redux

我正在开发一个React + Redux应用程序,该应用程序必须将商店中的某些值保存到localStorage。我有一些实用程序功能,可以将值安全地存储到localStorage中。我有一个动作(重击)和减速器。

const wallet = (state = getFromLocalStorage('wallet'), action) => {
  switch(action.type) {
    case 'SET_WALLET':
      setToLocalStorage('wallet', action.payload); // <--- **SIDE EFFECT?**
      retrun action.payload;
    default:
      return state;
  }
}

减速器必须是纯函数。 getToLocalStorage函数调用是否破坏了减速器的纯度?如果是这样,在哪里可以调用此函数?

2 个答案:

答案 0 :(得分:2)

这绝对是FP术语的副作用,但实际上您的代码没有什么不好。除了可能的redux / flux,没有其他更好的解决方法可以在组件之间(甚至在react.js树之外)共享状态。

函数式编程是一件好事,但您无需将其变成邪教

答案 1 :(得分:1)

正如其他评论所述:是的,这绝对是副作用。现在,在这种情况下,它可能不会中断,但是减速器不是正确的选择。

更好的解决方案是在商店订阅回调或中间件中执行此操作。或者,甚至更好的是使用many store persistence libraries already available之一。进行大批量存储也可以接受,特别是如果您只想保留少量数据而不是整个存储状态时。