关于redux和reducer函数的副作用

#1

最近刚拿redux flux做项目,发现有些副作用不好处理啊。比如这种情况应该怎么处理?

比如一个html5离线应用,操作数据会同步在本地,应用的数据在内存state里也中有一份,在indexedDB里也有一份,在应用载入时从indexedDB里加载到state,在reducer操作时随时同步数据到indexedDB,

比如有一个action,在reducer里面操作后,把操作的结果同时写入state和indexedDB,那这个reducer显然是有副作用了,但要把同步indexedDB的操作移出reducer也很难,因为改数据结构的逻辑有点复杂,移出到reducer外的话同一份逻辑会同时出现在reducer里外了。

这种情况有什么好方法处理?还是不管副作用了?

#2

考虑了一下,还是得按redux的做法,把所有带异步操作的逻辑或有副作用的逻辑都移到action creator里去,虽然action creator变得不那么纯粹了。

#3

@weijarz 数据为什么要放在indexDB呢?
除了个别临时的数据,比如用户当前的文本输入、用户的姓名头像等,需要临时存一下,防止意外页面关闭丢失。
绝大部分数据,放在内存就好了吧。

#4

可离线应用啊,就和一般的手机App一样,收到数据同时放本地,断网也也能看。比如你做个邮件应用,在线时收到邮件总会同时存在本地吧,断网时可以看之前的邮件。

#5

@weijarz 可以写个中间件

#6

我觉得,妄图一种方式解决所有问题,总是不靠谱的。

#7

这不是中间件的问题啊。

不过这问题我早就解决了,把保存到cache的代码写在异步action里了,和ajax调用一样处理。