请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

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

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

假如第一个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解决收藏的问题呢

正在回答 回答被采纳积分+3

2回答

CrazyCodeBoy 2018-08-23 18:25:23

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

优化方案:

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


0 回复 有任何疑惑可以回复我~
  • 提问者 慕仔3427096 #1
    没太明白 本地存储跟存内存不是一个东西吗 本地存储用的asyncStorage 如果存内存是怎么个操作方法
    回复 有任何疑惑可以回复我~ 2018-08-23 18:36:16
提问者 慕仔3427096 2018-08-23 17:58:03

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

0 回复 有任何疑惑可以回复我~
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信