我正在开发一个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
函数调用是否破坏了减速器的纯度?如果是这样,在哪里可以调用此函数?
答案 0 :(得分:2)
这绝对是FP术语的副作用,但实际上您的代码没有什么不好。除了可能的redux / flux,没有其他更好的解决方法可以在组件之间(甚至在react.js树之外)共享状态。
函数式编程是一件好事,但您无需将其变成邪教
答案 1 :(得分:1)
正如其他评论所述:是的,这绝对是副作用。现在,在这种情况下,它可能不会中断,但是减速器不是正确的选择。
更好的解决方案是在商店订阅回调或中间件中执行此操作。或者,甚至更好的是使用many store persistence libraries already available之一。进行大批量存储也可以接受,特别是如果您只想保留少量数据而不是整个存储状态时。