为什么还要对单篇文章进行判空?
// 读取缓存
var postsCollected = wx.getStorageSync("postsCollected")
// 如果缓存为空会报错,所以要在有缓存的情况下才执行setData
if(postsCollected){
// 针对单篇文章
var collected=postsCollected[postId]
// 对空进行判断,以防出错
if(collected){
this.setData({ collected: postsCollected[postId] })
}
}else{
// 如果没有postsCollected,即是没有缓存的情况下,默认设置为空对象,默认缓存的内容为false设置false
var postsCollected={};
postsCollected[postId]=false;
// 写缓存
wx.setStorageSync("postsCollected",postsCollected)
}
为什么点击第一篇文章就没有报错,而点击第二篇文章就报错?对单篇文章进行判空,那没有点击文章之前,storage不是没有数据吗?那就是每篇文章都为空,那为什么点击第一篇文章的时候不报错?
正在回答 回答被采纳积分+1
onColletionTap: function (event) {
// this.getPostsCollectedSyc();
this.getPostsCollectedAsy();
},
getPostsCollectedAsy: function () {
var that = this;
wx.getStorage({
key: "posts_collected", //从缓存中获取 posts_collected
success: function (res) {
var postsCollected = res.data; //缓存中的数据
var postCollected = postsCollected[that.data.currentPostId]; //假设现在缓存没有任何数据,那么对当前这篇文章, postCollected 就位undifined
console.log(postCollected);//undifined
// 收藏变成未收藏,未收藏变成收藏
postCollected = !postCollected; //然后到了这,对一个undifined的值进行取反,postCollected就变成了true,现在这个缓存就有了第一个 键值对 ,就是你当前点击收藏按钮的这篇文章,值为true。
postsCollected[that.data.currentPostId] = postCollected;
that.showToast(postsCollected, postCollected);
}
})
}
上面那个你看的不是很方便,重新粘贴一个有格式的
这是后面的代码,这个缓存大概的逻辑就是,当你点击进入文章,但是不进行收藏时,缓存里没有任何的键值对,当你对任意一篇文章就行收藏时,才会把这篇文章是否收藏以
键值对
的方式写入缓存,收藏为true,当你取消这篇文章的收藏时,简直队取反会变为false,但是也仅仅是针对你点击了收藏的这篇文章,其他的文章只要你不动收藏按钮就不会有对应的键值对
出现在缓存里,也就是说你点过几篇文章的收藏按钮,就会有几个键值对在缓存内。
- 参与学习 人
- 提交作业 622 份
- 解答问题 6815 个
微信带火了小程序,也让前端工程师有了更多的展现机会,本阶段带你从移动基础知识的学习到webAPP开发,及小程序开发,让你PC端与移动端两端通吃。
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星