callback具体怎么执行的?

来源:9-3 收藏功能的实现-2【实战应用】

weixin_慕先生3065687

2019-12-05

return <PopularItem
projectModel={item}
theme={theme}
onSelect={(callback) => {
NavigationUtil.goPage({
theme,
projectModel: item,
flag: FLAG_STORAGE.flag_popular,
callback,
}, ‘DetailPage’)
// this.props.navigation.navigate(‘tab1’);//跳转到createMaterialTopTabNavigator中的指定tab,主要这个navigation一定要是在跳转到createMaterialTopTabNavigator中的指页面获取的
}}

  • 将callback传到DetailPage,
  • detailpage执行callback(isFavorite);//更新Item的收藏状态,这callback(isFavorite)具体怎么更新isFavorite的?

onFavoriteButtonClick(){
const {projectModel,callback}=this.params;
const isFavorite=projectModel.isFavorite=!projectModel.isFavorite;
callback(isFavorite);//更新Item的收藏状态
this.setState({
isFavorite:isFavorite,
});
let key = projectModel.item.fullName ? projectModel.item.fullName : projectModel.item.id.toString();
if (projectModel.isFavorite) {
this.favoriteDao.saveFavoriteItem(key, JSON.stringify(projectModel.item));
} else {
this.favoriteDao.removeFavoriteItem(key);
}
}

写回答

1回答

CrazyCodeBoy

2019-12-06

首先在item点击时将item的callback函数传递给详情页对应课程代码: 

https://git.imooc.com/coding-304/GitHub_Advanced/src/master/js/page/PopularPage.js#L184 

然后当详情页收藏状态发送变化调用callback时,会出发item中的这段代码:

https://git.imooc.com/coding-304/GitHub_Advanced/src/master/js/common/BaseItem.js#L47 

从而达到从详情页改变收藏状态后,列表页对应的item也能及时更新的效果。

 另外建议通过debug打断点跟踪代码运行的方式体会下代码的整个调用的链路。

1
0

RN入门到进阶,打造高质量上线App

解锁React Native开发应用新姿势,React Native新版本热门技术

3144 学习 · 3241 问题

查看课程