favorite数据收藏实时更新的问题

来源:7-4 Favarite(收藏)模块的数据收藏状态实时更新

慕仔3427096

2018-08-22

在做这章节的时候遇到一个小问题  虽然不影响使用 但是感觉很别扭  就是比如说初始化项目的时候 

假如第一个item是收藏状态的 当我再点这个item的收藏按钮的应该是取消收藏 把取消收藏的状态存到数据库里

 然后收藏按钮变成未收藏的按钮 

这个都没问题 问题就出现在当我下拉刷新的时候那个按钮又变成了收藏状态的按钮 一会儿又变成了未收藏的按钮

 如果原来是未收藏的按钮 当我点击之后变成了已收藏的按钮,但是下拉刷新的时候按钮先变成未收藏的 然后又变成了已收藏的按钮 反正就是最后按钮的状态是对的 但是总是要闪一下

我想了很久 感觉问题就是出现在获取本地keys这段代码上

_getFavoritekeys() {

    favoriteDao.getFavoritekeys().then( keys => {

      if (keys) {

        this.updataState({favoriteKeys: keys});

      }

      this.flushFavoriteState();

    }).catch( error => {

      this.flushFavoriteState();

    })

  }

开始的时候item是收藏状态的 当点击之后取消收藏 按钮变成了未收藏的按钮 然后把未收藏状态存到数据库 这个时候下拉刷新重新获取数据 执行上面的代码 也就是先获取本地存的keys获取到之后改变state,state一变就重新render这个时候重新render那个projectModel并没有变化 所以this.props.projectModel.isFavorite依然上次保存的收藏状态 然后this.flushFavoriteState();再去处理数据源重新改变state又去执行render这时候按钮状态又变回未收藏的了

唉  不知道我说码了这么多字 老师能不能看明白  这个问题能不能解决呢 还是就是可不可以在react-native里用redux解决收藏的问题呢

写回答

2回答

CrazyCodeBoy

2018-08-23

问题的根源在于:每次刷新都会从本地数据库读取收藏状态,然后刷新收藏状态,而读取本地收藏状态需要一定的时间所以会出现闪一下;

优化方案:

  • 当收藏状态改变后,在将其同步到本地存储之后,内存中 也保存一份,每次刷新数据时直接从内存中取会快很多;


0
1
慕仔3427096
没太明白 本地存储跟存内存不是一个东西吗 本地存储用的asyncStorage 如果存内存是怎么个操作方法
2018-08-23
共1条回复

慕仔3427096

提问者

2018-08-23

用这个getDerivedStateFromProp方法就没有问题 不知道跟那个componentwillReceiveProps有什么区别

0
0

React Native技术精讲与高质量上线App开发

一个真实的上线项目,一次完整的开发过程,全面掌握React Native技术

1577 学习 · 727 问题

查看课程