采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
当在没有缓存,首次进入页面时,我点入第一篇文章,有初始化第一条缓存,并赋值false,但是点入第二个文章的时候,第二条缓存并没有初始化,没有赋值,返回的是undefined,麻烦能解释一下嘛。
当你点击第二个文章的时候,postsCollected 里面只有{0:fase}, 这时候postId = 2; 你代码中调postsCollected[postId] 也就是调postsCollected[2] ,因为里面没有2这个key,所以取不到,肯定是undefined。而且这个初始化是针对postsCollected为空的时候,当里面有{0:fase},其实走的是if语句。
非常感谢!
老师这方法有个小小的bug
首先描述一下老师原本的逻辑:
第一步:获取缓存集
第二步:判断缓存集是否存在
如果postsCollected缓存集存在,那么就获取缓存集中对应的id号,前端状态变量collected就为真,显示图标已收藏
否则,就是缓存集不存在,那么就先创建一个空的缓存集,将当前文章缓存状态先设置为false,存入缓存集。collected默认为false
这里面的问题是:如果缓存集存在,但是对应的id号不存在呢?获取不到对应的id号,那么postCollected就会被认为是undefine,出现错误。
因此,我的修改是,postCollected应该在判断语句前定义好,然后在if条件语句(判断缓存集是否存在)中再嵌套一个if条件语句(判断是否存在对应的id号),如果有更好的办法请及时告知,非常感谢。
步骤更改如下:
第二步:获取缓存文章id
第三步:判断缓存集是否存在
如果缓存集存在 继续判断对应的id值是否存在(存在 设置collected调节前端收藏状态; 不存在 设置当前文章的缓存为false)
缓存集不存在 创建一个空的缓存集对象 设置当前文章缓存为false
备注:collected不设置就默认为false
哥们,能不能请教你一个问题,就是后面的oncollection的方法为了获取postid,在前面定义了一个this.data.current=postid,这里是属于赋值,那么如果我换成this.setdata方法的话是this.setdata({ postid:postId })?
方便截图吗?
视频里 老师应该没有对onload进行测试,直接去测试收藏按钮了,所以没有发现这个问题,我是加了一层判断有没有对应id的缓存记录,就行了
登录后可查看更多问答,登录/注册
历时4年,学员20000+,缔造高口碑的精品课程
16.2k 32
4.1k 24
1.9k 22
4.0k 22
1.7k 16
购课补贴联系客服咨询优惠详情
慕课网APP您的移动学习伙伴
扫描二维码关注慕课网微信公众号